Zrobiłem bibliotekę, która zależy od CEFsharp, który wymaga zbudowania biblioteki dla konkretnych platform. Więc nie ma wsparcia AnyCPU.Dodawanie bibliotek x86 i x64 do pakietu NuGet
Teraz chcę spakować to w NuGet. O ile rozumiem, musisz umieścić te pliki w folderze kompilacji i mieć plik .targets
, który wybiera poprawną bibliotekę DLL w celu odniesienia. Więc skończyło się z pakietem Nuget wygląda tak:
lib
monodroid
MyLib.dll
xamarin.ios10
MyLib.dll
net45
MyLib.dll (x86)
build
net45
x86
MyLib.dll (x86)
x64
MyLib.dll (x64)
MyLib.targets
umieścić następującą wewnątrz pliku .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>
tak daleko tak dobry. Teraz problem. Po dodaniu tego Nuget do nowego projektu WPF, widzę odniesienie do biblioteki pojawiające się w pliku .csproj
jak:
<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>
Chociaż nie widzę niczego wspomniało o pliku .targets
. Czy to nadal jest sposób na zrobienie tego z NuGet 3? Czy zrobiłem coś nie tak? Obecnie kończy się to niepowodzeniem w środowisku wykonawczym podczas uruchamiania x64 z powodu odniesienia do biblioteki x86.
Jeśli nie potrzebujesz obsługi nowszych projektów systemu Windows 10 korzystających z project.json, po prostu spróbuj usunąć katalog lib \ Net45. NuGet powinien zainstalować się w projekcie WPF i po prostu zaimportować plik .targets do pliku projektu (.csproj). –
Nie planuję wspierać projektów UWP ani żadnych nowszych projektów korzystających z nowych rzeczy project.json. Będę próbował jutro ponownie. Jednak nadal nie zdziwił się, że cele są przywoływane w pliku csproj, w którym został dodany nuget. – Cheesebaron
Próbowałem usunąć folder lib \ net45, który nie zrobił nic, ale sprawiał, że nie był w ogóle zbudowany, ponieważ nie mógł znaleźć biblioteki dll. – Cheesebaron