Nuget 包,带有用于 sdk 和非 sdk 项目类型的本机库,并支持多目标(net452、netstandard20、netstandard21)
Nuget package with native libraries for sdk and non-sdk project types and with supporting multitargetting (net452, netstandard20, netstandard21)
我有一个支持 3 种不同 TF
的 NuGet 程序包,应该可供 Non-sdk
(旧 csproj
格式)和 Sdk
的消费者(应用程序)使用(一个新的)csproj
个文件。我的块还包含 native
Windows、Linux 和 mac os.
库
我遇到的唯一问题与本地库的处理有关。
我以这种方式配置它(也有类似的步骤涵盖非windows OS
s):
<!--IsWindows is defined in the first steps-->
<ItemGroup Condition=" '$(IsWindows)' == 'true' ">
<Content Include="$(MyLibrariesPathInTheSolution)/nativeWindowsLibrary.dll">
<Pack>true</Pack>
<PackagePath>runtimes/win/native</PackagePath>
</Content>
</ItemGroup>
<ItemGroup Condition=" '$(IsWindows)' == 'true' ">
<Content Include="$(MyLibrariesPathInTheSolution)/nativeWindowsLibrary.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>nativeWindowsLibrary.dll</Link>
</Content>
</ItemGroup>
以上配置适用于 sdk
个项目,但不包括 non-sdk
个项目。所以,我在主 csproj
:
中又添加了一步
<ItemGroup Condition=" '$(IsWindows)' == 'true' ">
<Content Include="MyApp.targets">
<Pack>true</Pack>
<PackagePath>build</PackagePath>
</Content>
</ItemGroup>
其中 MyApp.targets 看起来像:
<?xml version="1.0" encoding="utf-8"?>
<!--IsWindows is also defined here, skipped this definition just to reduce the number of lines-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Condition=" '$(IsWindows)' == 'true' ">
<Content Include="$(MSBuildThisFileDirectory)../runtimes/win/native/nativeWindowsLibrary.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>nativeWindowsLibrary.dll</Link>
</Content>
</ItemGroup>
</Project>
以上解决了与 non-sdk
项目相关的消费者问题,但如果消费者使用 xamarin
+ mac OS
会触发问题,因为该平台试图处理 nativeWindowsLibrary.dll
(MacOS-built
库也被处理,但它预计与 Windows-built
不同)在构建过程中即使 OS = Windows
上有条件(在这种情况下是 false
)。
所以,我的主要问题是有任何关于如何为我们需要支持的上述情况创建 NuGet 包的指南(示例):
- 非 SDK 和 SDK csproj 文件
- 不同的目标框架
- 平台相关库(放在
runtimes
)
另外,对提供的配置有什么建议吗?
这是 xamarin https://github.com/xamarin/xamarin-macios/issues/10337 中与 mono msbuild 问题相关的错误
https://github.com/mono/mono/issues/15569
我有一个支持 3 种不同 TF
的 NuGet 程序包,应该可供 Non-sdk
(旧 csproj
格式)和 Sdk
的消费者(应用程序)使用(一个新的)csproj
个文件。我的块还包含 native
Windows、Linux 和 mac os.
我遇到的唯一问题与本地库的处理有关。
我以这种方式配置它(也有类似的步骤涵盖非windows OS
s):
<!--IsWindows is defined in the first steps-->
<ItemGroup Condition=" '$(IsWindows)' == 'true' ">
<Content Include="$(MyLibrariesPathInTheSolution)/nativeWindowsLibrary.dll">
<Pack>true</Pack>
<PackagePath>runtimes/win/native</PackagePath>
</Content>
</ItemGroup>
<ItemGroup Condition=" '$(IsWindows)' == 'true' ">
<Content Include="$(MyLibrariesPathInTheSolution)/nativeWindowsLibrary.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>nativeWindowsLibrary.dll</Link>
</Content>
</ItemGroup>
以上配置适用于 sdk
个项目,但不包括 non-sdk
个项目。所以,我在主 csproj
:
<ItemGroup Condition=" '$(IsWindows)' == 'true' ">
<Content Include="MyApp.targets">
<Pack>true</Pack>
<PackagePath>build</PackagePath>
</Content>
</ItemGroup>
其中 MyApp.targets 看起来像:
<?xml version="1.0" encoding="utf-8"?>
<!--IsWindows is also defined here, skipped this definition just to reduce the number of lines-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Condition=" '$(IsWindows)' == 'true' ">
<Content Include="$(MSBuildThisFileDirectory)../runtimes/win/native/nativeWindowsLibrary.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Link>nativeWindowsLibrary.dll</Link>
</Content>
</ItemGroup>
</Project>
以上解决了与 non-sdk
项目相关的消费者问题,但如果消费者使用 xamarin
+ mac OS
会触发问题,因为该平台试图处理 nativeWindowsLibrary.dll
(MacOS-built
库也被处理,但它预计与 Windows-built
不同)在构建过程中即使 OS = Windows
上有条件(在这种情况下是 false
)。
所以,我的主要问题是有任何关于如何为我们需要支持的上述情况创建 NuGet 包的指南(示例):
- 非 SDK 和 SDK csproj 文件
- 不同的目标框架
- 平台相关库(放在
runtimes
)
另外,对提供的配置有什么建议吗?
这是 xamarin https://github.com/xamarin/xamarin-macios/issues/10337 中与 mono msbuild 问题相关的错误 https://github.com/mono/mono/issues/15569