Tôi đã tạo một thư viện phụ thuộc vào CEFsharp yêu cầu xây dựng thư viện cho các nền tảng cụ thể. Vì vậy, không hỗ trợ AnyCPU.Thêm thư viện x86 và x64 vào gói NuGet
Bây giờ tôi muốn gói phần mềm này vào một NuGet. Theo tôi hiểu, bạn phải đặt các tệp này vào thư mục xây dựng và có tệp .targets
chọn tệp dll chính xác để tham chiếu. Vì vậy, tôi đã kết thúc với một gói NuGet tìm kiếm như thế này:
lib
monodroid
MyLib.dll
xamarin.ios10
MyLib.dll
net45
MyLib.dll (x86)
build
net45
x86
MyLib.dll (x86)
x64
MyLib.dll (x64)
MyLib.targets
tôi đặt bên sau của tập tin .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>
Cho đến nay rất tốt. Bây giờ cho vấn đề. Khi thêm NuGet này cho một dự án WPF mới, tôi thấy tham chiếu đến thư viện xuất hiện trong tệp .csproj
như:
<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>
Mặc dù tôi không nhìn thấy bất cứ điều gì đề cập đến các tập tin .targets
. Đây có phải là cách để làm điều đó với NuGet 3 không? Tôi đã làm gì sai sao? Hiện tại, lỗi này không hoạt động khi chạy x64 do tham chiếu đến lib x86.
Nếu bạn không cần hỗ trợ các dự án Windows 10 mới hơn sử dụng project.json, tôi chỉ thử xoá thư mục lib \ Net45. NuGet nên cài đặt vào một dự án WPF và chỉ cần nhập tệp .targets vào tệp dự án (.csproj). –
Tôi không có kế hoạch hỗ trợ UWP hoặc bất kỳ dự án mới nào sử dụng công cụ project.json mới. Sẽ thử lại vào ngày mai. Tuy nhiên, vẫn còn khó hiểu để không nhìn thấy các mục tiêu được tham chiếu trong tệp csproj nơi mà nuget được thêm vào. – Cheesebaron
Tôi đã thử xóa thư mục lib \ net45, không có gì ngoài việc làm cho nó không được xây dựng vì nó không thể tìm thấy dll. – Cheesebaron