我有一个解决方案foo.sln.其中的所有库都是SDK项目.但是只应该包装其中一个
默认情况下
dotnet pack
试图打包所有项目.没有排除过滤器或包含过滤器.推荐的流程是什么?
最佳答案 您可以通过在csproj文件中设置属性来选择要作为nuget包打包的项目,如下所示:
< IsPackable>真< / IsPackable> – 创建包
< IsPackable>假LT; / 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
通过这种方式,我们可以为测试和常规项目指定不同的公共属性.
关于这一点的一个注意事项是,默认情况下,只应用csproj找到的第一个Directory.Build.propst,要更改此行为,您需要在嵌套的Directory.Build.props文件的开头添加此行(在Project标记内):
<Import Project="$([MSBuild]::GetPathOfFileAbove('$(_DirectoryBuildPropsFile)', '$(MSBuildThisFileDirectory)../'))" />
关于所有这些的更多信息可以在这里找到:https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2017