如何解决dotnet pack 生成一个没有应用 copyToOutput 的包
我正在尝试使用 dotnet pack
打包几个本机库来创建 NuGet 包,这些库应该在构建包安装到的项目时放置在输出目录中。我在 csproj 中有这些行:
<ItemGroup>
<Content Include="native\*">
<Pack>true</Pack>
<PackageCopyToOutput>true</PackageCopyToOutput>
<PackageFlatten>true</PackageFlatten>
<PackagePath>contentFiles;content</PackagePath>
</Content>
</ItemGroup>
打包后,我在包中有此元数据:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>DualLibClassLibrary</id>
<version>1.0.0</version>
<authors>melanchall</authors>
<owners></owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Dual-lib class library</description>
<copyright>Copyright © Melanchall 2021</copyright>
<dependencies>
<group targetFramework=".NETFramework4.5" />
<group targetFramework=".NETStandard2.0" />
</dependencies>
<contentFiles>
<files include="test.dll" buildAction="Content" copyToOutput="true" flatten="true" />
<files include="test.dylib" buildAction="Content" copyToOutput="true" flatten="true" />
</contentFiles>
</metadata>
</package>
所以文件有 copyToOutput="true"
属性。
但是如果我们尝试将其安装到 .NET Framework 控制台应用程序项目中,我们将获得以下结构:
所以我们在解决方案中有 test.dll
和 test.dylib
。看起来不错,但是让我们来看看 csproj:
<ItemGroup>
<None Include="App.config" />
<None Include="packages.config" />
<None Include="test.dylib" />
</ItemGroup>
<ItemGroup>
<Content Include="test.dll" />
</ItemGroup>
嗯... test.dylib
添加为 None
,test.dll
添加为 Content
并且...没有任何项目设置了 CopyToOutputDirectory
。如果我们构建项目,我们显然不会将库复制到输出目录。
也许我做错了什么?
我已经创建了 the issue on dotnet/sdk 存储库,但它似乎不会很快得到解决,所以我在这里问。也许有人知道一个黑客或秘密魔法来强制 dotnet pack
按预期工作。
是的,我可以创建具有所需属性的 .targets
文件并将其打包到一个包中,一切都会起作用。但我想 dotnet pack
应该依靠上面显示的属性为我们做这件事。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。