Visual studio Visual Studio 2008是否支持特定于配置(调试/发布生成)的引用? 我有一个C++ C++项目,一个C++/CLI文件,是用/CLI编译的唯一文件,我想给C dll添加一个引用。

Visual studio Visual Studio 2008是否支持特定于配置(调试/发布生成)的引用? 我有一个C++ C++项目,一个C++/CLI文件,是用/CLI编译的唯一文件,我想给C dll添加一个引用。,visual-studio,visual-studio-2008,msbuild,c++-cli,projects-and-solutions,Visual Studio,Visual Studio 2008,Msbuild,C++ Cli,Projects And Solutions,调试和发布有不同的版本,但我似乎只能添加一个应用于所有配置的引用。“引用搜索路径”对话框包含一条警告,如果我尝试使用任何$ConfigurationName类型参数,它们将只引用项目中的第一个配置 因此,我目前的想法是: 在一个解决方案下将两个项目连接在一起,并添加对项目的引用,而不是对DLL程序集的引用。我的理解是VisualStudio将匹配这些配置。不理想,因为我的项目和DLL属于不同的区域。 一个只带有调试配置的调试项目和一个只带有发布配置的发布项目,但这感觉像是一个bodge。 在Vi

调试和发布有不同的版本,但我似乎只能添加一个应用于所有配置的引用。“引用搜索路径”对话框包含一条警告,如果我尝试使用任何$ConfigurationName类型参数,它们将只引用项目中的第一个配置

因此,我目前的想法是:

在一个解决方案下将两个项目连接在一起,并添加对项目的引用,而不是对DLL程序集的引用。我的理解是VisualStudio将匹配这些配置。不理想,因为我的项目和DLL属于不同的区域。 一个只带有调试配置的调试项目和一个只带有发布配置的发布项目,但这感觉像是一个bodge。
在Visual Studio 2008中实现特定于配置的引用是否有更简洁的方法?

我通常会根据配置将所有项目的输出路径设置到相同的位置。例如,对于release构建,所有内容都进入/path/to/release,对于Debug-to/path/to-Debug。然后我手动编辑项目文件,以包含一个单独的目标文件,其中包含以下内容:

编辑显示如何使用条件选择带有前缀的调试/释放dll

<-- file myDll.targets -->
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
  <ItemGroup  Condition=" '$(Configuration)' == 'Debug' ">
    <Reference Include="myDll_d">
      <Private>False</Private>
    </Reference>
  </ItemGroup>
  <ItemGroup  Condition=" '$(Configuration)' == 'Release' ">
    <Reference Include="myDll">
      <Private>False</Private>
    </Reference>
  </ItemGroup>
</Project>
然后,在需要引用此dll的项目中,包括目标文件:

<Import Project="myDll.targets"/>
由于Private=false,msbuild不会尝试复制任何内容,它只会查找myDll.dll并在输出路径中找到它

这不是特别干净,但确实有效。还可以修改目标文件以引用不同的平台x86/x64


你的第一个想法可能是最常用的,因为它需要较少的麻烦-除了确实项目应该在同一个解决方案,据我所知

谢谢你的建议,但是我们目前的做法是在调试DLL时附加_d,我不知道如何应用你的建议来解决这个问题。哈,我实际上也使用了这种做法,但没有将其纳入答案中,因为我认为它太复杂了;我会加上它。这是答案的一部分。谢谢你!我的vcproj文件以表单形式存储引用,这是不允许的…?@TobiasKnauss抱歉,不知道。。您是否尝试过,例如,或者这无关紧要,C程序集的调试版本和发布版本都包含相同的元数据。如果C项目不在您的解决方案中,那么您可以选择发布版本作为参考。您必须停止重命名调试构建DLL的做法,这与C构建系统极不兼容。这只有在你使用链接器的情况下才有意义,你不需要链接托管代码。嗨,汉斯,你有什么链接我可以了解更多吗?我一直使用d作为防止发布调试版本的保护措施,但同时也要明确哪些DLL应用于调试目的,即未经优化的DLL。如果调试程序集和发行版程序集的文件名相同,是否有一种简单的方法来区分它们?是的,C构建系统会创建不同的文件夹名。bin\Debug和bin\Release。您只能复制发布版本,这样就不会有歧义。然后使用调试版本。程序集的发布版本调试得非常好,唯一遗漏的是不能在大括号上设置断点。请记住,机器代码是在.NET中动态生成的,jitter知道附加了调试器。