Visual Studio 自动绑定重定向

fd3cxomn  于 2023-04-22  发布在  其他
关注(0)|答案(6)|浏览(330)

运行VS 2017,最新更新。
documentation声明要启用自动绑定重定向,请修改csproj文件并在相应的<PropertyGroup>下添加以下内容:

<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>

从历史上看,我的项目在app. config中有一些绑定重定向条目。我最近更新了解决方案的所有nuget包,并在提交中修改了几个绑定重定向条目以匹配新版本。
我想确保QA的一切都很好,所以我删除了App.Config中的所有条目,以为它们会在下一个构建中重新生成(正如文档所建议的那样)。
令我惊讶的是,在clean / build中没有向app.config添加任何内容。
所以我的问题是,通过巩固解决方案中的依赖项,我不再需要它们,这样假设是否安全?
或者有什么问题,VS应该生成重定向和失败。

pes8fvy9

pes8fvy91#

看看这篇文章:
https://weblog.west-wind.com/posts/2014/Nov/29/Updating-Assembly-Redirects-with-NuGet
有一个命令可以强制Nuget重写解决方案配置文件中的所有程序集重定向。
在包管理器控制台上试试这个:

PM> Get-Project –All | Add-BindingRedirect
t9eec4r0

t9eec4r02#

这是因为源app.config没有被修改,只有输出(在编译步骤中创建并放置在Debug / Release文件夹中的输出)应用程序配置文件被修改。
从Visual Studio 2013开始,针对.NET Framework 4.5.1的新桌面应用程序使用自动绑定重定向。这意味着如果两个组件引用同一个强名称程序集的不同版本,运行库自动将绑定重定向添加到输出应用程序配置中较新版本的程序集(app.config)文件。此重定向将覆盖否则可能发生的程序集统一。源app.config文件不会被修改。
来源
你的源代码app.config中的重定向是由Nuget自己生成的。你已经通过对包的更改触发了它。

zu0ti5jz

zu0ti5jz3#

有一个警告,将自动生成您丢失的重定向。
1.清理您的项目
1.构建您的项目
1.转到错误列表筛选器并激活警告筛选器
1.筛选主项目的警告
1.查找带有如下消息的警告:
发现同一依赖程序集的不同版本之间存在冲突。在Visual Studio中,双击此警告(或选中它并按Enter键)以修复冲突;否则,将以下绑定重定向添加到应用程序配置文件中的“运行时”节点
1.请点击留言!

更新:需要在项目属性-〉应用-〉自动生成绑定重定向中激活警告

sqserrrh

sqserrrh4#

在使用package.config的解决方案中使用VS 2019编译dll项目,我尝试将以下标记添加到PropertyGroup部分内的csproj:

<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<AutoUnifyAssemblyReferences>true</AutoUnifyAssemblyReferences>

这没有任何区别。而且我删除了标签。我现在确信AutoGenerateBindingRedirects实际上默认为true。
我使用的解决方案是这样的:
对于有关显式绑定与自动生成的绑定冲突的错误/警告或“考虑重新Map”绑定的建议,只需使用绑定重定向定义中的建议版本更新配置文件即可:
例如,如果消息是这样的:

The explicit binding redirect on "Microsoft.Bcl.AsyncInterfaces, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" conflicts with an autogenerated binding redirect. Consider removing it from the application configuration file or disabling autogenerated binding redirects. The build will replace it with: "< bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" xmlns="urn:schemas-microsoft-com:asm.v1" />"

您需要相应地更新配置文件中现有的bindingredirect:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" culture="neutral" publicKeyToken="cc7b13ffcd2ddd51" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

在某些情况下,您的项目引用的项目中已经存在最新版本的包。在这种情况下,在项目中删除包引用和bindingRedirect意味着将通过传递引用使用最新版本,并且错误/警告将得到解决。
在解决了所有这些问题之后,构建可能会给予一个关于冲突包的错误,而不会告诉您是哪个包导致了问题。

Found conflicts between different versions of the same dependent assembly that could not be resolved. These reference conflicts are listed in the build log when log verbosity is set to detailed. C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets

在Tools〉Options〉Project and Solutions〉Build and Run中,您可以将MSBuild Project Output Verbosity设置为Detailed。然后通过在Output窗口中按Ctrl+S,您可以将输出保存到一个文件中,并使用文本编辑器搜索它。我发现在那里列出了一些寻找字符串的冲突:“无法解决冲突”。然后您可以尝试弄清楚如何处理列出的冲突。最有可能的是使用更多的绑定重定向。
最后,我以一个仍然抱怨冲突的构建结束,没有任何关于导致冲突的信息,我可以在详细的构建输出中清楚地识别。
银是打开为bin文件夹中的dll生成的配置文件,名称为mydll. config。在那里,存在我创建的所有显式绑定重定向以及一些**自动生成的重定向。我将它们复制粘贴到项目app.config文件中,错误就消失了。
因此,总而言之,VS在默认情况下正确识别并解决了B/w包版本的冲突,而不需要费心向csproj添加AutoGenerateBindingRedirects和其他标记。然后,一旦它这样做了,它就会给你一个错误消息,没有任何有用的信息,只是为了破坏你的一天。

c0vxltue

c0vxltue5#

我成功地生成了重定向,编辑了我的.csproj文件并添加了其中一个:

<Target Name="ForceGenerationOfBindingRedirects"
          AfterTargets="ResolveAssemblyReferences"
          BeforeTargets="GenerateBindingRedirects"
          Condition="'$(AutoGenerateBindingRedirects)' == 'true'">
    <PropertyGroup>
      <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
    </PropertyGroup>
</Target>

<PropertyGroup>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
dgiusagp

dgiusagp6#

在VS 2022中,转到Properties -〉Application -〉并选中Auto-generate binding redirects复选框。
然后编译你的应用,并查看一个名为bin\YourApplicationName.dll.config的新文件。它将包含自动生成的绑定重定向。从这里复制它们并将其复制到你的web.config中,你就自由了。

相关问题