Встроенная библиотека в мульти-таргетинг. NET проект - PullRequest
0 голосов
/ 04 мая 2020

У меня есть проект. NET, который имеет 2 целевые платформы: netstandard1.6 и net40. Я пытаюсь встроить библиотеки (ICU4N и J2N), предназначенные для netstandard1.3 и net40.

Я создал папку ...\lib\, в которую помещаю библиотеки .dll для соответствующих целей.

Мой файл .csprog выглядит следующим образом

<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
  <PropertyGroup Label="Configuration">
    <SignAssembly>True</SignAssembly>
    <DelaySign>False</DelaySign>
    <DocumentationFile>$(TargetDir)bin\$(Configuration)\$(TargetFramework)\someName.xml</DocumentationFile>
  </PropertyGroup>
  <PropertyGroup>
    <TargetFrameworks>netstandard1.6;net40</TargetFrameworks>
  </PropertyGroup>
  <PropertyGroup>
    <OutputType>library</OutputType>
  </PropertyGroup>

  ...

  <PropertyGroup>
    <NoWarn>1701;1702;1591;1570;1572;1573;1574;1580;1584;1658</NoWarn>
  </PropertyGroup>
  <ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
    <Reference Include="System" />
  </ItemGroup>

  ...

  <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.6' ">
    <PackageReference Include="Microsoft.NETCore.Portable.Compatibility" Version="1.0.1" />

    <Reference Include="ICU4N, Version=60.0.0.0, Culture=neutral, PublicKeyToken=efb17c8e4f0e291b">
      <HintPath>lib\ICU4N\netstandard1.3\ICU4N.dll</HintPath>
    </Reference>
    <Reference Include="J2N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=f39447d697a969af">
      <HintPath>lib\J2N\netstandard1.3\J2N.dll</HintPath>
    </Reference>
  </ItemGroup>

  <ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
    <Reference Include="ICU4N, Version=60.0.0.0, Culture=neutral, PublicKeyToken=efb17c8e4f0e291b">
      <HintPath>lib\ICU4N\net40\ICU4N.dll</HintPath>
    </Reference>
    <Reference Include="J2N, Version=2.0.0.0, Culture=neutral, PublicKeyToken=f39447d697a969af">
      <HintPath>lib\J2N\net40\J2N.dll</HintPath>
    </Reference>
  </ItemGroup>
</Project>

Когда я запускаю программу, выдается ошибка

System.IO.FileNotFoundException : Could not load file or assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

, это Ошибка возникает из-за того, что файлы ...\bin\Debug\net40\ICU4N.dll и ...\bin\Debug\netstandard1.6\ICU4N.dll одинаковы, но должны отличаться.

Вопрос в том, как настроить проект и файл .csproj так, чтобы при сборке версия версии Библиотека netstandard1.3 попадает в папку ...\bin\Debug\netstandard1.6\, а версия библиотеки net40 в папку ...\bin\Debug\net40\, поскольку теперь версия библиотеки net40 попадает в папку ...\bin\Debug\netstandard1.6\ и ...\bin\Debug\net40\.

Спасибо. Вы заранее.

1 Ответ

1 голос
/ 05 мая 2020

Проблема в HintPath, первая найденная библиотека была встроена.

Решение: Добавьте следующий код для целевого блока netstanard1.6.

    <None Remove="lib\ICU4N\net40\ICU4N.dll" />
    <None Remove="lib\J2N\net40\J2N.dll" />
...