由于我们有三个显式x86和x64版本的程序集,因此我编辑了要使用的相应.csproj文件,例如,这样的块:
<ItemGroup Condition=" '$(Platform)' == 'x86' ">
<Reference Include="CaliberRMSDK">
<HintPath>..\Libraries\CaliberRMSDK_IKVM\32bit\CaliberRMSDK.dll</HintPath>
</Reference>
<Content Include="..\Libraries\CaliberRMSDK_IKVM\32bit\ikvm-native.dll">
<Link>ikvm-native.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="..\Libraries\CaliberRMSDK_IKVM\32bit\JVM.dll">
<Link>JVM.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup Condition=" '$(Platform)' == 'x64' ">
<Reference Include="CaliberRMSDK">
<HintPath>..\Libraries\CaliberRMSDK_IKVM\64bit\CaliberRMSDK.dll</HintPath>
</Reference>
<Content Include="..\Libraries\CaliberRMSDK_IKVM\64bit\ikvm-native.dll">
<Link>ikvm-native.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="..\Libraries\CaliberRMSDK_IKVM\64bit\JVM.dll">
<Link>JVM.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
在Visual Studio 2010中重新加载.csproj文件并使用“x86”作为平台时,所有工作都完美无缺。当选择'x64'作为平台时,使用正确的64位汇编参考但链接的(<Content Include= ...>
..)总是使用32位的(因此应用程序坏了。)
在项目文件中已经没有任何CPU了,我会“期望”它对内容包含的工作也很好......但事实并非如此。有什么我想念的吗?
答案 0 :(得分:1)
我们将Condition属性放在Reference元素上,并且工作正常。也许Condition属性也需要添加到Content元素中? (你真的需要Reference元素和Content元素吗?)例如:
<Reference Include="SomeLib" Condition="$(Platform)=='x86'">
<HintPath>..\..\ThirdParty\SomeLib\clr4\x86\SomeLib.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="SomeLib" Condition="$(Platform)=='x64' Or $(Platform)=='AnyCPU'">
<HintPath>..\..\ThirdParty\SomeLib\clr4\x64\SomeLib.dll</HintPath>
</Reference>
答案 1 :(得分:0)
这个问题已经回答了吗?如果没有,我建议切换ItemGroups的顺序,看看是否实现了相反的结果(它在x64中工作,但在x86上Visual Studio显示错误的引用)。
答案 2 :(得分:0)
所以这只是'只是'视觉/显示问题。在底层构建中使用正确的引用等,只有VS2010显示错误的引用。一切都好,只是不可见。