- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在一个解决方案文件中有 20 个项目。其中 1 个项目是所有项目都引用的标准库项目。
大约一年前,我们添加了一个新的 nuget 包,我们将其称为 Package A
版本 5.0.0.0。它有一堆文件,当我们编译时它会传输到所有地方,但我们最终处理了它。我们将该包添加到我们的标准库项目(另外 19 个引用)。
我是 Nuget 的新手(所以也许我做错了什么)所以我制作了一个新包作为 Package A
的助手。我已经设置了所有内容,以便助手依赖于 Package A
版本 3.0.0.0 到 5.0.0.0(因此它适用于版本低于我们的其他人)。让我们将这个新包称为 Package A helper
我安装了 Package A helper
,一切正常。我去做一个拉取请求,我们解决方案中的每个 app.config 现在都有
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Package.A" publicKeyToken="8FC3CCAD86" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
没有它也能正常编译,但 visual studio 会提示并发出警告。是什么赋予了?我的经理现在不让我合并我的代码,因为它给 app.config 增加了太多的噪音并且太依赖于包 A。
为什么添加一个依赖于 Package A
的 nuget 包然后必须有这个新的 bindingRedirect,而在我们安装 Package A Helper
之前已经满足主要依赖项?
为什么当我在 nuget 包和 package.config 中指定 3.0.0.0-5.0.0.0 时它说 0.0.0.0-5.0.0.0
更新:
当我构建 Package A helper
并引用 Package A
版本 5.0.0.0 时,所有 bindingRedirects 都不会自动填充到每个 app.config 中,而是生成警告。我最初使用 3.0.0.0 构建它,因为我认为最好以最低的依赖性构建它。问题仍然存在,因为 visual studio 仍在警告并建议创建 bindingRedirects。
No way to resolve conflict between "Package A, Version=5.0.0.0, Culture=neutral, PublicKeyToken=83hfhsd33" and "Package A, Version=3.0.0.0, Culture=neutral, PublicKeyToken=83hfhsd33". Choosing "Package A, Version=5.0.0.0, Culture=neutral, PublicKeyToken=83hfhsd33" arbitrarily.
Consider app.config remapping of assembly "Package A, Culture=neutral, PublicKeyToken=83hfhsd33" from Version "3.0.0.0" [] to Version "5.0.0.0" [path to Package A dll] to solve conflict and get rid of warning.
解决方案只是将我的 nuget 包依赖项从 3.0.0.0 更改为 5.0.0.0 并只允许 5.0.0.0 并摆脱我的 allowedVersions="[3,6)"
包.config?我不想降低我的 nuget 包的有用性和向后兼容性,但同时我不希望我的主要解决方案需要警告或 bindingRedirects。
更新 2:因此将引用属性中的 Copy Local
设置为 False
实际上解决了我的问题,但我不明白为什么。
最佳答案
I had originally built it with 3.0.0.0 because I figured it was best ...
这就是问题开始的地方。您的解决方案现在依赖于 两个 不同版本的 A.dll,一个将覆盖另一个。哪个版本的 A.dll 最终被复制到 bin\Debug 中是随机的。最后构建的任何项目。
这个不能好下场,解决方案注定无法执行。如果是 A-helper.dll 中的代码,则当 5.0.0.0 版本最终被复制时它将失败。或者它将是任何其他项目中使用 A.dll 的代码,当复制版本 3.0.0.0 时它将失败。最终结果是解决方案总是失败。
所以你看到构建系统正在做一些事情。它注意到差异并选择其中一个版本获胜。它选择 5.0.0.0,这是正确的选择。它还修改了 app.config,添加了 bindingRedirect,这样要求加载 3.0.0.0 版本的代码实际上将获得 5.0.0.0。如果您使第 5 版与第 3 版充分兼容,那可能可以工作。或者不是,主版本号的两个增量通常会带来麻烦。您会在测试时发现。
So setting Copy Local in the reference properties to False actually solved my issues
这并没有解决问题,你只是阻止了构建系统假设它应该为你解决这个问题。由于它不再需要复制 DLL,它猜测您将在 GAC 中安装程序集,以便两个版本可以共存。也许你做到了,在开发机器上这样做并不常见而且通常是非常不明智的。考虑到额外的安装步骤,您的老板和团队成员不太可能会喜欢这个解决方案。
所以您可以做两件基本的事情:
让构建系统解决这个问题。正如它所做的那样,它正确地解决了问题,您的解决方案将起作用。如果版本 5 与版本 3 足够兼容,那么 A-helper.dll 中的代码甚至可以正确执行。如果老板不喜欢,那你当然得把它划掉,然后做:
将 A-helper 项目中的引用更改为 A 版本 5.0.0.0。现在不再有任何不兼容,唯一的 A.dll 对所有代码都有好处。鉴于您的要求,这是您老板唯一喜欢的解决方案。
关于c# - 绑定(bind)重定向被添加到每个 app.config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36320441/
任何人都可以详细说明用途是什么(何时使用)asp.net web应用中的web.config,web.config.debug,web.config.release文件?? 最佳答案 它是用于更改调试
我正在尝试创建一个 nuget 包,它将添加一个 DLL 并在正确的配置文件中配置它。该包可用于控制台/表单应用程序或 Web 应用程序,因此我想更新相应的配置文件,app.config 或 web.
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 有关您编写的代码问题的问题必须在问题本身中描述具体问题 - 并包含有效代码 以重现它。
我正在开发一个 MVCPortlet。我的 view.jsp 中有一个链接,它调用 liferay 中 portlet 类中的一个方法。 ">Comlex This is the Refahi
我一直在尝试了解如何使用不同的配置文件,我刚刚发现 this link这非常有帮助。唯一的问题是,似乎只有在“发布”解决方案时才会考虑转换,而如果您现在只是进行通用调试或运行,则不会考虑转换。 通常这
我想处理我的 jsx 代码,所以我像这样编写 webpakc.config.js: { test: /\.js$/, loaders: ['react-hot', 'babel-loa
我正在使用 Web.Config 转换将我的应用程序部署到 Azure。我的服务中还有 2 个站点,一个公共(public)网站和一个私有(private) WCF 站点端点。我正在部署multipl
我正在使用 spring security 4.2.5.RELEASE 和 spring 4.3.16.RELEASE我的 XML 配置工作正常,如下所示
config.json 和 config.js 之间有什么区别?我必须同时使用两者吗?我什么时候需要使用其中之一? (https://docs.strongloop.com/display/publi
我运行了 Doctrine 控制台工具: $ php vendor/doctrine/orm/bin/doctrine orm:schema-tool:create --dump-sql 我得到了这个
我正在尝试将 Doctrine ORM 与 Silex 一起使用,但由于缺乏一致的文档,我发现这是一种完全令人沮丧的体验。 当我在控制台运行 vendor/bin/doctrine 时,我得到以下输出
我需要在 web.config 中的多个 WCF 服务中切换出一个 IP 地址。使用 web.config 转换,除了通过 xpath 指定每个地址之外,还有什么方法可以创建搜索和替换语句。例如。对于
我使用来自Ubuntu 14.04的tmux(tmux 1.8)。 我想通过~/.tmux.conf对其进行一些配置。但是无论我在该文件中设置的内容如何,tmux session 都相同。然后,我
嗨,我正在尝试将我的域别名重定向到一个域。 我目前有这个规则 当别名前面没有 www 时它工作得很好.. 我怎么说重定向所有不等于这个域的 谢
我的 Web 配置中有以下 XML,在 Release模式下,我需要根据其子项的名称属性删除 dependentAssembly 部分:assemblyIdentity。我在这里尝试了答案:xdt t
我正在为 web.config 文件寻找一个轻量级的文本编辑器,它具有颜色语法突出显示(如在 Visual Studio 中)。 有什么建议? 最佳答案 您可以使用 Notepad++ .当您使用 w
ImagePicker This plugin allows selection of multiple images from the camera roll
ImagePicker This plugin allows selection of multiple images from the camera roll
如果我有一个 Web 应用程序(有它自己的 web.config )和一个它使用的 .dll 恰好有它自己的 app.config 发生冲突时哪个设置文件会胜出? 最佳答案 不,您不会有任何冲突,因为
问题描述: 我正在尝试在 bash 脚本中使用终止符,但我不断收到一条错误消息,指出没有这样的文件或目录:~/.config/terminator/config .并防止终端在屏幕上弹出。但是,当我在
我是一名优秀的程序员,十分优秀!