如何将app.config文件与C++/CLI结合使用来配置VS 2012中的程序集绑定



我目前正在一个项目中使用Microsoft BCL异步库(此处),该项目有大量相互依赖的程序集,所有程序集都是根据.NET 4 Full Profile编译的,我不得不在每个项目中使用程序集绑定重定向来编译它(根据此处的问题2)。

我现在的问题是,我从C++/CLR DLL项目中使用了其中一个库,它实际上不需要使用async,但我有以下编译错误:

2> C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1578,5):警告MSB3268:未能解析主引用"ImInterface.dll",因为它间接依赖于无法在当前目标框架中解析的框架程序集"System.Runtime,Version=1.5.11.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"。".NETFramework,Version=v4.0"。若要解决此问题,请删除引用"ImInterface.dll",或将应用程序重定向到包含"System.Runtime,Version=1.1.5.11.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"的框架版本。

我添加了在所有C#项目中使用过的app.config文件,但它在C++项目中似乎没有任何效果。我是否必须将其放在特定目录中或执行任何其他步骤才能识别app.config文件?

我的app.config文件的内容是:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.5.11.0" newVersion="2.5.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.5.11.0" newVersion="2.5.11.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

欢迎提出任何建议!

谨致问候,Anthony

我也遇到了同样的问题,事实证明,<SpecificVersion>True</SpecificVersion>起到了帮助作用。

在继续阅读之前,请注意,当使用"Visual Studio 2012-Windows XP(v110_XP)"平台工具集构建C++/CLI项目时,问题似乎只有才会出现也就是说,如果你不需要创建与WinXP兼容的DLL,那么切换到"Visual Studio 2012(v110)"就可以了。

让我详细说明我的场景:

我有一个针对WinXP(v110_xp)的C++/CLI控制台应用程序项目(ConsoleAppCLI)。ConsoleAppCLI引用了一个库(AsyncLib),该库通过NuGet:安装了Microsoft.Bcl.Async

[ConsoleAppCLI.vcxproj]   (C++/CLI, .NET 4.0 v110_xp)
|
|
[AsyncLib.csproj]      (C#, .NET 4.0)
|
|
[Microsoft.Bcl.Async]    (via NuGet)

我遇到了完全相同的问题,app.config也没有帮助,但有帮助的是:

  1. 卸载控制台AppCli.vcxproj
  2. 直接编辑vcxproj文件
  3. 查找对安装了Async-nuget包的库的引用(在我的例子中,是AsyncLib.csproj的<ProjectReference>)
  4. <ProjectReference></ProjectReference>之间添加以下内容:<SpecificVersion>True</SpecificVersion>

请注意,ConsoleAppCLI是我在依赖关系树中的顶级项目。如果您有依赖于生成MSB3268的C++/CLI程序集的程序集,则同样必须将<SpecificVersion>True</SpecificVersion>添加到引用中(例如,如果我有一个附加的C#库,该库具有ConsoleAppCli作为依赖项,则我也必须引用ConsoleAppCli<SpecificVersion>True</SpecificVersion>)。

顺便说一句,这个解决方案来自这里。

最新更新