我有一个解决方案 foo.sln .其中的所有库都是 SDK 项目。然而,其中只有一个应该是 包装
默认情况下
dotnet pack
尝试打包所有项目。没有排除过滤器或包含过滤器。推荐的流程是什么?
最佳答案
您可以通过在 csproj
中设置属性来选择要打包为 nuget 包的项目。文件,像这样:<IsPackable>true</IsPackable>
- 创建包<IsPackable>false</IsPackable>
- 不要创建包
如果您不想在每个文件中指定它,您可以创建一个名为 Directory.Build.props
的文本文件。在具有以下内容的目录中:
<Project>
<PropertyGroup>
<IsPackable>false</IsPackable>
</PropertyGroup>
</Project>
它将自动包含在此文件夹和所有嵌套文件夹中 SDK 项目文件 (csproj) 开头的所有内容中,因此您可以为这组项目指定通用默认值,如果需要,可以在单个 csproj 文件中覆盖它们。
如果您不希望它们被覆盖或需要使用 csproj 中定义的某些值,则应使用文件名
Directory.Build.targets
,它将自动包含在 csproj 的末尾。在我们的项目中,我们使用以下结构:
\
\src
<actual projects>
Directory.Build.props
\tests
<unit tests>
Directory.Build.props
Directory.Build.props
MySolution.sln
通过这种方式,我们能够为测试项目和常规项目指定不同的公共(public)属性。
需要注意的是,默认情况下只有第一个
Directory.Build.props
由 csproj
找到的将被应用,要更改此行为,您需要在嵌套 Directory.Build.props
的开头添加此行文件(在 Project
标签内): <Import Project="$([MSBuild]::GetPathOfFileAbove('$(_DirectoryBuildPropsFile)', '$(MSBuildThisFileDirectory)../'))" />
有关所有这些的更多信息可以在这里找到:https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2017
关于.net - 如何在解决方案上选择性地使用 dotnet pack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46540851/