.net-4.0 - 如何使用带有 C++/CLI 的 app.config 文件在 VS 2012 中配置程序集绑定(bind)?

标签 .net-4.0 visual-studio-2012 c++-cli

我目前在一个项目中使用 Microsoft BCL 异步库 (here),其中包含大量相互依赖的程序集,这些程序集都是针对 .NET 4 Full Profile 编译的,我不得不在每个项目中使用程序集绑定(bind)重定向来编译它(根据问题 2 here )。

我现在遇到的问题是我从 C++/CLR DLL 项目中使用这些库之一,它实际上不需要使用异步,但我有以下编译错误:

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,版本=v4.0”。要解决此问题,请删除引用“ImInterface.dll”或将您的应用程序重新定位到包含“System.Runtime, Version=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>

任何建议表示赞赏!

问候,
安东尼

最佳答案

我遇到了同样的问题,结果是, <SpecificVersion>True</SpecificVersion> 帮助。

在继续阅读之前,请注意问题似乎只发生在使用“Visual Studio 2012 - Windows XP (v110_xp)”平台工具集构建 C++/CLI 项目时! 也就是说,如果您不需要创建与 WinXP 兼容的 DLL,请改用“Visual Studio 2012 (v110)”,应该没问题。

让我详细说明一下我的情况:

我有一个 C++/CLI 控制台应用程序项目 (ConsoleAppCLI) 针对 WinXP (v110_xp)。 ConsoleAppCLI 引用库 (异步库)通过 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 也没有帮助,但有帮助的是以下内容:
  • 卸载 ConsoleAppCli.vcxproj
  • 直接编辑vcxproj文件
  • 找到对安装了 Async nuget 包的库的引用(在我的情况下,<ProjectReference> 到 AsyncLib.csproj)
  • 之间 <ProjectReference></ProjectReference> ,添加以下内容:<SpecificVersion>True</SpecificVersion>

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

    此解决方案来自 over here , 顺便一提。

    关于.net-4.0 - 如何使用带有 C++/CLI 的 app.config 文件在 VS 2012 中配置程序集绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13880969/

    相关文章:

    entity-framework - 如何将现有的 EDMX 1.0 模型升级到新的 EDMX 2.0?

    c# - 将日期时间转换为没有默认时间值的字符串

    .net - 通过 NativePointer 和 Marshal 实现 3D Studio Max SDK .NET/C++ 互操作性

    c# - 如何将 char 和 char* 从 C# 传递到 C++/CLI?

    visual-studio-2010 - 如何从 SilverLight 4 应用程序项目定位 .net Framework 4.0?

    c# - MemoryMappedFile.CreateFromFile 总是抛出 UnauthorizedAccessException

    c# - Entity Framework 4.0 如何确定实体的工厂方法需要哪些参数?

    c# - 捕获特定的 MySQL 错误 (C#)

    debugging - 多线程 python 应用程序在 Visual Studio 中没有遇到断点

    c++ - 如何在同一个程序中多次启动和关闭 spdlog?