. Net Базовый проект пытается условно ссылаться на 32/64 битную сборку, но при tnet build всегда разрешается 64 бит - PullRequest
1 голос
/ 17 марта 2020

У меня есть проект библиотеки ядра. net и другой проект ядра Asp. net, ссылающийся на этот проект библиотеки.

Проект библиотеки ссылается на сборку с версиями x64 и x86, и я хочу ссылаться на версию в соответствии со значением свойства PlatformTarget.

Я видел этот вопрос и уже использовал их решение, за исключением того, что я использую PlatformTarget вместо создания пользовательского свойства, вот файл проекта:

<Project Sdk="Microsoft.NET.Sdk">    
    <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>            
        <Configurations>Debug;Release</Configurations>
        <Platforms>AnyCPU</Platforms>
        <PlatformTarget>x86</PlatformTarget>
    </PropertyGroup>        
    <ItemGroup>                  
      <Reference Include="STPadLibNet, Version=8.4.3.0, Culture=neutral, PublicKeyToken=a0c5b3c72d40bbc6">
        <HintPath>$(PlatformTarget)\STPadLibNet.dll</HintPath>
      </Reference>          
    </ItemGroup>          
</Project>

Сборка, на которую я пытаюсь ссылаться, называется STPadLi bNet, 64-битная версия находится в папке x64 в каталоге Project, а 32-битная версия находится в папке x86.

По некоторым причинам dotnet build всегда разрешается в Папка x64, даже если для платформы установлено значение x86, в результате чего при запуске приложения возникает исключение BadImageFormatException.

Я читал о проверке сборки и теперь понимаю, что когда средство распознавания сборки находит сборку в каталоге Project или его подкаталогах, оно игнорирует HintPath, я попытался использовать другое имя файла для dll, например STPadLibNetx64.dll для 64-разрядной версии и STPadLibNetx86.dll для 32-разрядной версии, и ссылаюсь на правильную версию, например:

<HintPath>STPadLibNet$(PlatformTarget).dll</HintPath>

Почему-то DLL-файл копируется в мой выходной каталог проекта библиотеки, но это не с выбрав выходной каталог основного проекта asp. net, в результате чего сборка не обнаружила исключение при запуске. Кроме того, Rider (используемая мной среда IDE) показывает, что сборка не разрешена MSBuild.

Итак, как скажите сделать tnet сборку для использования HintPath? или как ссылаться на правильную версию сборки в соответствии с PlatformTarget?

Примечания:

  1. Я использую. Net core 3.1 и моя IDE - Rider 2019.3, OS Is windows 10 x64 1909 и язык программирования C# 8.
  2. сборка, на которую я ссылаюсь, является аппаратным SDK, который я не могу изменить по понятным причинам
  3. Я не хочу создать два проекта, и я предпочитаю не создавать фиктивный проект.

1 Ответ

0 голосов
/ 25 марта 2020

В итоге я переместил папки x86 и x64, содержащие STPadLi bNet .dll, из каталога проектов в каталог решений, таким образом HintPath снова соблюдается.

...