Я создал библиотеку, которая зависит от CEFsharp, которая требует создания библиотеки для определенных платформ. Таким образом, поддержка AnyCPU не поддерживается.
Теперь я хочу упаковать это в NuGet. Насколько я понимаю, вы должны поместить эти файлы в папку сборки и иметь файл .targets
, который выбирает правильную DLL для ссылки. Итак, я закончил с пакетом NuGet, выглядящим следующим образом:
lib
monodroid
MyLib.dll
xamarin.ios10
MyLib.dll
net45
MyLib.dll (x86)
build
net45
x86
MyLib.dll (x86)
x64
MyLib.dll (x64)
MyLib.targets
Я помещаю внутри файла .targets
следующее:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="PlatformCheck" BeforeTargets="InjectReference"
Condition="(('$(Platform)' != 'x86') AND ('$(Platform)' != 'x64'))">
<Error Text="$(MSBuildThisFileName) does not work correctly on '$(Platform)' platform. You need to specify platform (x86 or x64)." />
</Target>
<Target Name="InjectReference" BeforeTargets="ResolveAssemblyReferences">
<ItemGroup Condition="'$(Platform)' == 'x86' or '$(Platform)' == 'x64'">
<Reference Include="MyLib">
<HintPath>$(MSBuildThisFileDirectory)$(Platform)\MyLib.dll</HintPath>
</Reference>
</ItemGroup>
</Target>
</Project>
Пока все хорошо. Теперь к проблеме. Добавляя этот NuGet к новому проекту WPF, я вижу ссылку на библиотеку, которая появляется в файле .csproj
, например:
<Reference Include="MyLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d64412599724c860, processorArchitecture=x86">
<HintPath>..\packages\MyLib.0.0.1\lib\net45\MyLib.dll</HintPath>
<Private>True</Private>
</Reference>
Хотя я ничего не вижу о файле .targets
. Это еще способ сделать это с помощью NuGet 3? Я сделал что-то не так? В настоящее время это не удается во время выполнения при запуске x64 из-за ссылки на x86 lib.