为什么Visual Studio会为程序集重定向创建app.config文件?

4

我有一个涉及到100个项目的解决方案。我不知道是什么导致的,但偶尔Visual Studio会给我的每个项目添加一个app.config文件。它通常看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

据我所知,这些 app.config 文件似乎并不需要。如果我还原所有这些更改并删除 app.config 文件,一切都能正常工作。为什么 Visual Studio 会这样做,我该如何停止它?
1个回答

2
通常情况下,当您更新NuGet包时,VS会添加这些配置(绑定重定向)。它有助于预防.NET查找依赖项时出现一些问题。例如:
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
  </dependentAssembly>

在这个配置中,我们指定如果你的应用程序的某些其他依赖项引用11.0.0.0版本之前的程序集,它们应该使用版本11.0.0.0。如果你省略了这个绑定重定向,你将在运行时遇到异常。
如果你的应用程序没有这样的依赖关系,你可以删除这些配置。

所以,理论上来说,如果我确保我的其他项目不引用低于11.0.0.0版本的程序集,那么VS就不会再创建app.config文件并将其包含到我的.csproj文件中了? - sirdank
1
您可以确保您的其他项目不引用低于11.0.0.0版本,但问题在于,您不能确保第三方程序集没有引用之前的版本。如果有,则会出现错误。但如果您确定它们没有,那么您可以放心地将其删除。 - olegk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接