ItemGroup, специфичная для платформы .csproj, работает для ссылок на сборки, но не включает в себя содержимое? - PullRequest
18 голосов
/ 17 декабря 2010

Поскольку у нас есть три сборки, представленные в явных версиях 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>

При перезагрузке файла .csproj в Visual Studio 2010 и использовании «x86» в качестве платформы все отлично работает. При выборе «x64» в качестве платформы используется правильная ссылка на 64-битную сборку НО для связанной (<Content Include= ...> ..) всегда используются 32-битные (и поэтому приложение не работает) .

В файлах проекта больше нет ЦП, и я бы «ожидал», что он будет работать нормально, даже для содержимого… но это не так. Я что-то пропустил?

Ответы [ 3 ]

1 голос
/ 19 января 2012

Мы помещаем атрибут 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>
0 голосов
/ 02 февраля 2011

Так что это «только» проблема с визуальным отображением.Под сборками используются правильные ссылки и т. Д., Только VS2010 отображает неправильные ссылки.Все хорошо, просто не видно.

0 голосов
/ 01 февраля 2011

Так ответили ли на этот вопрос?Если нет, я бы порекомендовал переключить порядок ItemGroups и посмотреть, будет ли достигнут противоположный результат (что он работает в x64, но в x86 Visual Studio отображает неправильную ссылку).

...