问题标签 [publisher-policy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
120 浏览

.net - 是否可以将发布者策略应用于强命名的私有发布程序集?

我在工作中创建了一个通用库,但与这个问题不同,它没有发布到 GAC。相反,它会私下发布到公司特定的安装文件夹。编辑:所有内部应用程序都进入同一个文件夹。

是否仍然可以应用发布者策略,允许较旧的应用程序使用较新版本的 DLL? 这篇文章听起来我可以,但对我来说并不完全清楚。

如果是这样,我应该将什么分发到我公司特定的安装文件夹中?

  1. 公共库的配置文件?(policy.1.0.MyLibrary.config) (这将是最简单的。)
  2. 公共库的策略 DLL?(policy.1.0.MyLibrary.dll -- #1 的编译版本。)
  3. 或者为每个使用公共库的应用程序设置一组配置文件?(MyApp1.exe.config、MyApp2.exe.config 等)(YUCK!)
0 投票
2 回答
188 浏览

.net - 如何引用仍在开发中的共享程序集 (.NET)

我负责开发和维护一组用于构建我们的产品应用程序的通用框架程序集。这些组件相对较新,并且随着新功能的实现等而处于不断变化的状态。因此,它们经常被重建和重新分配并不罕见。我希望随着大会的稳定,这种情况会减少,但这就是今天的情况。

现在,这些程序集被放置在一个 Common 文件夹中,开发项目可以在其中引用相同的程序集。应用更新就像替换文件一样简单,开发项目会在下次加载和构建时自动获取更改。

我遇到的问题是我们可能有几个构建在框架上的程序集“层”——例如,我们有一个由所有应用程序共享的核心库和一个引用核心并由所有服务器应用程序共享的服务器库。每次更新框架程序集时,还必须重新构建所有依赖项,这使得这是一项非常庞大的任务。我不相信我可以使用 GAC,因为这将要求所有开发人员在每次发布新版本时更新他们的系统。

我调查了发布商政策,但出于以下几个原因,我怀疑这是否能解决我的问题:

  • 一方面,我不想在每次重建框架程序集时都重新创建文件——有没有办法让这个过程自动化?

  • 我不清楚它是否要求程序集进入 GAC。正如我所说,我不想在每次发布新版本的程序集时强迫我的开发人员重新安装、更新等。

  • 我对网络设置和配置没有任何控制权,因此有必要通过将文件放在网络共享中来避免整个“信任”问题。此外,我们的许多开发人员以有时连接的方式工作,我们希望文件在断开连接时可供他们使用。

目标是使更新这些程序集对我们正在使用它们的应用程序开发人员透明。毫无疑问,我们会在安装应用程序时将这些程序集安装到目标机器上的 GAC 中,但出于开发目的,我们不想这样做。将项目包含在每个应用程序的解决方案中也是不合理的,因为它们是由不同的团队开发的。

我无法想象只有我一个人在这些要求中,希望有人可以分享他们的经验和智慧来指导我找到解决方案。谢谢!

0 投票
1 回答
1609 浏览

.net - 是否可以删除发布者策略文件?

我有一种情况,供应商提供的程序集参考被搞砸了。基本上,它指向我不想使用的程序集版本。我使用 FusionLog 查看程序集绑定日志,并看到以下条目:

我似乎找不到发布者政策文件,我想知道是否有办法删除它?我尝试从 GAC 中删除程序集,但无济于事。

问题的背景是我被指示为 Sybase 的客户端软件安装补丁,但此补丁安装的程序集版本 (11.0.0.11292) 早于之前的程序集 (11.0.1.22582)。不要问我为什么会这样,但它确实发生了。

0 投票
1 回答
401 浏览

c# - GAC 中的发布者政策

我想将 dll v1 的消费者重定向到 dll v2。为此,我将在 GAC 中添加发布者政策。政策必须在 GAC 中吗?这是否意味着 dll v2 本身也必须驻留在 GAC 中?

0 投票
3 回答
813 浏览

wix - 哪种方法是使用 WIX 将一个发布者策略安装到 GAC 的正确方法?

使用WIX 3.5将一个发布者策略安装到 GAC 中的正确方法是什么?

我试图这样做:

用VS2008编译时出现这个错误:

policy.1.0.ClassLibrary1.dll 似乎无效。请确保这是一个有效的程序集文件,并且用户对该文件具有适当的访问权限。更多信息:HRESULT:0x8013101b

最后,使用 VS2010 编译时似乎没有任何问题。但是在完成安装过程时,DLL 已安装好,而发布者策略却没有。我还阅读了安装过程中生成的日志,但找不到原因。

谢谢阅读。

0 投票
0 回答
158 浏览

msbuild - 构建发布者策略程序集作为自动构建的一部分

有没有人解决了作为自动构建的一部分自动构建发布者策略程序集的问题?我在网上搜索过,有很多人问这个问题,但没有解决方案。

手动构建策略程序集非常容易出错,并且在任何情况下都需要成为我们在 TeamCity 中运行的持续集成构建的一部分。

我特别希望有一个使用 MSBuild 并且可以在 TeamCity 上运行的解决方案,但如有必要,我可以从其他解决方案中进行插值。当然,一定有人这样做了?

0 投票
1 回答
1119 浏览

.net - 在 app.manifest 中指定准确的参考版本

在我们的应用程序中实现 ODP.Net 的使用时,我遇到了版本的潜在问题,所以我敲开了一个快速测试应用程序,看看它是否会影响我们,确实如此。

我们有客户在 Oracle 上拥有或想要我们的应用程序,但他们使用不同的版本,并且他们通常在其工作站上部署的 Oracle 客户端版本具有企业标准。我们的想法是使用我们的应用程序(在程序目录中)部署一个固定版本的 ODP 以及适当的即时客户端,因为 Oracle 保证任何给定客户端版本的任何一方都具有 2 个主要版本的兼容性,这意味着我们可以使用,比如 Oracle通过使用部署 ODP 和客户端 11.1,从 10.1 到理论上的 Oracle 12。

这很好,但是如果我们的客户随后部署更高版本的 Oracle 客户端,该客户端在 GAC 中注册更新版本的 ODP 以及告诉应用程序无论如何都使用新版本的发布者策略,那么问题就来了。我们正在使用来自 EntlibContrib(ODP 包装器)的一个库的自定义实现,该库使用我们使用的特定版本的 EL5 和 ODP 构建,并且将更新版本部署到 GAC 会导致此失败,正如测试应用程序所证明的那样。

为了测试这一点,我使用了一个安装了 Win 7 x86 的干净 VM,然后添加了 Oracle Client 10.2(它在 GAC 中注册了 ODP 10.2)并让我的测试应用程序使用 ODP 和 Client 11.1。这工作得很好,所以我安装了客户端 11.2,在 GAC 中注册了 ODP,它也添加了发布者策略,这证明测试应用程序会失败。

为了解决这个问题,我向 app.manifest 添加了一个依赖项,如下所示:

这与我们正在部署的 ODP 二进制文件的版本和公钥相匹配,因此我希望测试应用程序能够使用它。但是在启动应用程序时出现以下错误:

The application has failed to start because its side-by-side configuration is incorrect.

事件日志包含以下内容:

Activation context generation failed for "C:\Program Files\OPT\OPT\OraclePerformanceTester.exe". Dependent Assembly Oracle.DataAccess,processorArchitecture="x86",publicKeyToken="89b483f429c47342",type="win32",version="2.111.7.20" could not be found. Please use sxstrace.exe for detailed diagnosis.

使用 sxstrace,我得到以下输出:

引用的文件 (Oracle.DataAccess.dll) 存在于可执行文件旁边的程序目录中,具有所有其他依赖项,但由于某种原因它不会拾取它。我之前必须使用的唯一清单是对运行良好的 exe 进行 UAC 检查,据我所知,我已按照步骤指定应该覆盖发布者策略的确切版本。我做错了什么?

干杯

0 投票
1 回答
4956 浏览

.net - 为什么我的应用程序总是使用最新的 GAC 版本而不是引用的版本?

语境

我在 GAC 中安装了 2 个不同版本的程序集,1.0 版和 2.0 版。我制作了一个引用 1.0 作为特定版本的应用程序。

问题

当我运行我的应用程序时,它将始终加载 2.0 版,而该应用程序专门引用 1.0 版。

问题

为什么会这样?如何强制我的应用程序加载已编译的版本?

在我看来,这与绑定重定向没有任何关系,因为我的应用程序在构建它时甚至不知道版本 2.0,并且引用“特定版本”元数据设置为 true。

谢谢。


编辑:

我引用的程序集实际上是 ODAC 包中的 Oracle.DataAccess。我注意到其他名为 Policy.x.xxx.Oracle.DataAccess 的程序集在 GAC 中发布。


编辑2:

查看 Oracle.DataAccess 策略后,我找到了定义绑定重定向的配置:

即使我将反向绑定重定向添加到我的应用程序配置中,GAC 中的策略似乎具有优先级。我发现一篇MSDN 文章处理该主题并建议使用此配置忽略策略:

但它仍然不起作用......


编辑3:

我试图从 GAC 中删除该策略并重新启动我的机器。它终于奏效了。它感觉不像是一个舒适的解决方案开发,但这个策略确实破坏了我的一个应用程序,这意味着在我的情况下禁用该策略是正确的做法。


最终编辑:

伊戈尔给了我正确的答案。要解决这些策略,我所要做的就是使用publisherPolicy正确配置部分中的设置:

0 投票
0 回答
1538 浏览

c# - 删除 .NET 项目中的程序集文件版本依赖性或“dll 与旧版本的向后兼容性”

我的项目遇到了装配兼容性问题。

1) 我有一个 .NET 项目,我在其中指定了一个程序集版本。“主要部分。次要部分。构建部分。修订部分”。2) 对于下一个构建,程序集版本递增。3)有许多文件(dll)没有任何变化,但它们的程序集版本已更新。4) 较新的“dll”文件与旧版本的相同 dll 文件不兼容。

我试图获取更多信息以在线解决此问题。

1)有一个发布者政策的概念,我可以在其中指定旧版本号。2) 为所有类添加到项目中的清单文件,并提供在当前版本不可用时可以使用的可能版本范围。

我不确定,如果我做得对。发布者策略方法和清单文件方法有什么区别。

是否可以对“dll”进行向后兼容。

0 投票
1 回答
641 浏览

c# - 发布商政策重定向不起作用

我正在学习使用发布者策略文件重定向程序集。做了以下事情:

  • 我有一个名为 Dependency 的 DLL,它是一个签名的,并已在 GAC 中注册。

  • 注册时,程序集版本为 1.0.0.1。

  • 我开发了一个测试客户端(消费者)并引用了相同的版本并构建并运行了一次。

  • 将依赖 DLL 的 AssemblyVersion 更改为 1.0.0.2

  • 创建了一个发布者策略文件,如下所示

在此处输入图像描述

  • 在GAC注册新版本
  • 使用Al.EXE之类的生成策略程序集如下图:

    D:\Test> al /link:policy.config /out:policy.1.0.Dependency.dll /keyfile:....\keyfile.snk /platform:x86

  • 我确保我只在消费者和依赖项中使用 X86 配置

  • 即使在注册策略程序集之后,我仍然看到消费者正在使用旧版本 (1.0.0.1),并且没有发生策略配置重定向。
  • 我尝试使用 Fusion 日志查看器,但没有看到任何重定向失败

请通过指导我所缺少的来帮助我。先感谢您。