我有一个 NuGet 包,它支持 3 种不同TF
的 s,并且应该可用于Non-sdk
(旧csproj
格式)和Sdk
(新格式)csproj
文件的消费者(应用程序)。我的 nugget 还包含native
适用于 Windows、Linux 和 mac os 的库。
我遇到的唯一问题与本机库的处理有关。我以这种方式配置它(也有类似的步骤涵盖非windows OS
):
<!--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
s. 因此,我在 main 中又添加了一步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
)
另外,对提供的配置有什么建议吗?