特定のプラットフォーム用のライブラリを構築する必要がある 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 で行う方法ですか? 私は何か間違ったことをしましたか?現在、x86 ライブラリへの参照が原因で、x64 を実行している場合、これは実行時に失敗します。