当我没有 app.config 文件时,当编译器告诉我“考虑 app.config 重新映射”时,我应该改变啥?

Posted

技术标签:

【中文标题】当我没有 app.config 文件时,当编译器告诉我“考虑 app.config 重新映射”时,我应该改变啥?【英文标题】:What should I change when the compiler tells me to "Consider app.config remapping" when I have no app.config file?当我没有 app.config 文件时,当编译器告诉我“考虑 app.config 重新映射”时,我应该改变什么? 【发布时间】:2013-10-10 10:47:07 【问题描述】:

在编译一个从 VS2003 中的 .NET 1.1 移植到 VS2008 中的 .NET 3.5 的解决方案时,我得到了几个建议,其中这个具有代表性:

考虑将程序集“System.Windows.Forms, Culture=neutral, PublicKeyToken=969db8053d3322ac, Retargetable=Yes”从版本“1.0.5000.0”[] 重新映射到版本“2.0.0.0”[C :\Program Files (x86)\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\System.Windows.Forms.dll] 来解决冲突并摆脱警告。

解决方案中的两个项目都没有 app.config 文件。但是,有大量 *.resx 文件包含“Version=1.0.5000.0”

我应该对“Version=2.0.0.0”进行全局搜索和替换吗?或者我应该如何纠正这个问题?

更新

我选择了“项目>升级项目”,重新构建,现在消息包括:

C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets:警告 MSB3245:无法解析此引用。找不到程序集“System.Windows.Forms.DataGrid”。检查以确保该程序集存在于磁盘上。如果您的代码需要此引用,则可能会出现编译错误。

无法解决“System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac, Retargetable=Yes”和“System.Xml, Version=2.0.0.0, Culture=neutral”之间的冲突, PublicKeyToken=b77a5c561934e089”。 任意选择“System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac, Retargetable=Yes”。

无法解决“System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac, Retargetable=Yes”和“System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”之间的冲突”。任意选择“System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac, Retargetable=Yes”。

考虑将程序集“System.Windows.Forms, Culture=neutral, PublicKeyToken=969db8053d3322ac, Retargetable=Yes”从版本“1.0.5000.0”[] 重新映射到版本“3.5.0.0”[C :\Program Files (x86)\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE\System.Windows.Forms.dll] 来解决冲突并摆脱警告。

更新 2

我的代码中确实有这一行:

this.dtGridUPC = new System.Windows.Forms.DataGrid(); 

尽管编译器警告我:“无法找到程序集“System.Windows.Forms.DataGrid”。检查以确保程序集存在于磁盘上。如果您的代码需要此引用,您可能会遇到编译错误。"

...我没有收到任何编译错误。

好奇者和好奇者。

【问题讨论】:

【参考方案1】:

请在 Visual Studio 的项目属性窗口中使用Auto-generate binding redirects

【讨论】:

至少也升级到 4.7.2。很多问题都消失了。 这只是我两天构建地狱的解决方案。谢谢!【参考方案2】:

您可以添加一个 app.config 文件,然后像这样映射库:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="dotless.ClientOnly" publicKeyToken="96b446c9e63eae34" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.3.1.0" newVersion="1.3.1.0" />
      </dependentAssembly>

【讨论】:

【参考方案3】:

我刚刚修复了这个错误,非常简单。关闭您的项目。再次打开。转到 NuGet 包以获取解决方案。您将有一个部分合并。就在搜索工具附近。 去那里并选择您要使用的版本。还要确保您的所有项目都具有相同的版本。 然后在所有解决方案中在您的命名空间之前添加缺少的库。现在编译你的项目,我希望它会重新开始工作。

【讨论】:

【参考方案4】:

我用这段代码添加了一个 app.config 文件,我的编译时间现在是原来的 1/3。这是用于 System.Data

<configuration>
    <runtime>
        <assemblybinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <!-- 2.0 to 3.5 -->
            <dependentassembly>
                <assemblyidentity culture="neutral" publickeytoken="969db8053d3322ac" name="System.Data" />
                <bindingredirect newVersion="3.5.0.0" oldVersion="2.0.0.0" />
            </dependentassembly>

            <!-- 1.0 to 3.5 -->
            <dependentassembly>
                <assemblyidentity culture="neutral" publickeytoken="969db8053d3322ac" name="System.Data" />
                <bindingredirect newVersion="3.5.0.0" oldVersion="1.0.5000.0" />
            </dependentassembly>
        </assemblybinding>
    </runtime>
</configuration>

我在这里找到了这段代码:http://grenangen.se/node/25#comment-1003

【讨论】:

【参考方案5】:

在我的情况下,输出窗口中显示了以下警告:

11>  Consider app.config remapping of assembly "log4net, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a" from Version "1.2.15.0" [] to Version "2.0.12.0" [C:\s\[SolutionName]\log4net.dll] to solve conflict and get rid of warning.
11>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2182,5): warning MSB3247: Found conflicts between different versions of the same dependent assembly. In Visual Studio, double-click this warning (or select it and press Enter) to fix the conflicts; otherwise, add the following binding redirects to the "runtime" node in the application configuration file: <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="log4net" culture="neutral" publicKeyToken="669e0ddf0bb1aa2a" /><bindingRedirect oldVersion="0.0.0.0-2.0.12.0" newVersion="2.0.12.0" /></dependentAssembly></assemblyBinding>

当我在“C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets”文件打开的输出窗口中单击此警告时。我很惊讶我应该更改解决方案文件夹之外的内容。另一个惊喜是,即使我使用 web.config 配置文件处理 Web 服务,我也应该更改 app.config。程序员可能没有意识到这个警告也适用于服务......

无论如何,请在“错误列表”窗口中双击此警告,而不是在“输出”窗口中。确保按下错误列表窗口顶部的警告按钮,以便您可以在错误列表窗口中看到此警告。这样你就应该通过适当的方式解决这个警告。

【讨论】:

以上是关于当我没有 app.config 文件时,当编译器告诉我“考虑 app.config 重新映射”时,我应该改变啥?的主要内容,如果未能解决你的问题,请参考以下文章

slowcheetah 不适用于 app.config

App.config 和 F# Interactive 不工作

App.config 中的更改不会在重新启动应用程序后反映出来

app.config 是做啥用的?

vstest.console.exe 忽略 app.config

绑定重定向被添加到每个 app.config