Ho creato una libreria che dipende da CEFsharp che richiede la creazione della libreria per piattaforme specifiche. Quindi nessun supporto AnyCPU.Aggiunta di librerie x86 e x64 al pacchetto NuGet
Ora voglio comprimere questo in un NuGet. Per quanto ho capito, devi mettere questi file nella cartella build e avere un file che seleziona la dll corretta per fare riferimento. Così ho finito con un pacchetto NuGet simile a questo:
lib
monodroid
MyLib.dll
xamarin.ios10
MyLib.dll
net45
MyLib.dll (x86)
build
net45
x86
MyLib.dll (x86)
x64
MyLib.dll (x64)
MyLib.targets
ho messo il seguente all'interno del file .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>
Fin qui tutto bene. Ora al problema. Quando si aggiunge questo NuGet ad un nuovo progetto WPF, vedo il riferimento alla libreria che appaiono nel file .csproj
come:
<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>
Anche se io non vedo nulla di cui circa il file .targets
. Questo è ancora il modo di farlo con NuGet 3? Ho fatto qualcosa di male? Attualmente questo non riesce in fase di esecuzione quando si esegue x64 a causa del riferimento alla lib di x86.
Se non è necessario per supportare le più recenti di Windows 10 progetti che utilizzano project.json vorrei solo provare a rimuovere la lib \ Net45. NuGet dovrebbe installare in un progetto WPF e importare semplicemente il file .targets nel file di progetto (.csproj). –
Non ho intenzione di supportare UWP o altri progetti più recenti che utilizzano il nuovo project.json stuff. Ci riproverò domani. Tuttavia, rimane perplesso di non vedere i target a cui si fa riferimento nel file csproj in cui è stato aggiunto il nuget. – Cheesebaron
Ho provato a rimuovere la cartella lib \ net45, che non ha fatto altro che non averlo generato perché non riesce a trovare la DLL. – Cheesebaron