CSProj由构建配置触发的不同DLL的条件

时间:2013-12-18 20:03:43

标签: c# visual-studio-2010 msbuild x86 64-bit

我正在尝试修改我的.csproj文件,以根据目标构建配置(特别是$(Platform))处理一些本机和(托管)包装程序集。一个具体的例子(虽然不是唯一的例子)是我使用的Oracle.DataAccess相互专门针对32位或64位,但不是两者兼而有之。此外,它依赖于32位和64位(分别)本机DLL。这个例子为我创造了一个问题。我希望基于构建配置触发的原因是因为我们经常因各种原因来回切换。

问题: 我将它们包含在项目的根目录(作为链接文件指向lib文件夹)中,并使用Content将其标记为AlwaysCopy,从而包含本机DLL。组。这会导致它们根据需要复制到我的bin文件夹中。我尝试通过使用ItemGroup {和Condition="'$(Platform)' == 'x86'"两个x64块来实现此目的但这似乎不起作用,因为我遇到构建错误,说“文件.. \ packages \ OracleClient \ 64BitNativeDrivers \ xxx.dll'无法添加到项目中。此文件夹中已存在同名文件。“,即使在彻底清除了解决方案的工件之后。

代码段:

  <ItemGroup Condition="'$(Platform)' == 'x86'">
    <Content Include="..\packages\OracleClient\32BitNativeDrivers\oci.dll">
      <Link>oci.dll</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="..\packages\OracleClient\32BitNativeDrivers\oraociicus11.dll">
      <Link>oraociicus11.dll</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="..\packages\OracleClient\32BitNativeDrivers\OraOps11w.dll">
      <Link>OraOps11w.dll</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  <ItemGroup Condition="'$(Platform)' == 'x64'">
    <Content Include="..\packages\OracleClient\64BitNativeDrivers\oci.dll">
      <Link>oci.dll</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="..\packages\OracleClient\64BitNativeDrivers\oraociicus11.dll">
      <Link>oraociicus11.dll</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="..\packages\OracleClient\64BitNativeDrivers\OraOps11w.dll">
      <Link>OraOps11w.dll</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

我试过在这里尝试一些可能性,但似乎我误解了如何正确地做到这一点,我真的可以使用一些帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

您是否尝试过滤器

Condition="'$(Platform)' == 'x86'"
<{1}}代码上的