Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net .csproj';s平台特定的ItemGroup适用于程序集引用,但不适用于内容包含?_.net_Assemblies_Cpu Architecture - Fatal编程技术网

.net .csproj';s平台特定的ItemGroup适用于程序集引用,但不适用于内容包含?

.net .csproj';s平台特定的ItemGroup适用于程序集引用,但不适用于内容包含?,.net,assemblies,cpu-architecture,.net,Assemblies,Cpu Architecture,由于我们有三个程序集,它们都有明确的x86和x64版本,因此我编辑了相应的.csproj文件,以使用如下块: <ItemGroup Condition=" '$(Platform)' == 'x86' "> <Reference Include="CaliberRMSDK"> <HintPath>..\Libraries\CaliberRMSDK_IKVM\32bit\CaliberRMSDK.dll</HintPath>

由于我们有三个程序集,它们都有明确的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>

..\Libraries\CaliberRMSDK_-IKVM\32bit\CaliberRMSDK.dll
ikvm-native.dll
总是
JVM.dll
总是
..\Libraries\CaliberRMSDK\u IKVM\64位\CaliberRMSDK.dll
ikvm-native.dll
总是
JVM.dll
总是
在VisualStudio2010中重新加载.csproj文件并使用“x86”作为平台时,所有这些都可以正常工作。当选择“x64”作为平台时,将使用正确的64位程序集参考,但链接(
)始终使用32位程序集参考(因此应用程序已损坏)


项目文件中不再有任何CPU,我“期望”它也能在包含内容的情况下正常工作。。但事实并非如此。有什么我遗漏的吗?

那么这个问题有没有得到回答?如果没有,我建议切换项目组的顺序,并查看是否达到相反的结果(它在x64中工作,但在x86上Visual Studio显示错误的引用)。

因此这“只是”一个视觉/显示问题。在构建下面确实使用了正确的引用等,只有VS2010显示了错误的引用。一切都很好,只是不可见。

我们将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>

..\..\ThirdParty\SomeLib\clr4\x86\SomeLib.dll
假的
..\..\ThirdParty\SomeLib\clr4\x64\SomeLib.dll

是否打开了msbuild详细日志并查看了发生的情况?我已经用一个空白项目对其进行了测试,它确实有效。正如这里所述,它应该是:(“VisualStudio查看PropertyGroup、ItemGroup、Import、property和item元素上的条件…”)。注意,Content标记表示该文件是静态文件,因此您不能以其他方式使用它。也许你想把它用作参考DLL?这行不通,好吧,人力资源部。。。上面的JVM.dll不是一个程序集引用,而是一个本机引用,其中包含p/invoke的函数,因此包含CopyToOutputDirectory等。基本上,它只是.csproj中的一个文件引用,应该复制到构建输出目录(但在我的情况下,它取决于要使用的arch)。在我的例子中,程序集引用文件可以正常工作,只有那些“引用的”/project-arch特定的引用文件不能正常工作。明天早上必须检查msbuild日志是否包含任何可能告诉我更多信息的内容。事实证明,msbuild-确实-使用正确的内容Include'ed.dll(感谢您提供有关检查msbuild日志的提示),Visual Studio 2010无法正确显示引用。感谢@Ron从未知道您可以对引用本身使用条件。工作起来很有魅力!