.net - 如何在解决方案上选择性地使用 dotnet pack

标签 .net

我有一个解决方案 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.propscsproj 找到的将被应用,要更改此行为,您需要在嵌套 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/

相关文章:

.net - 将键码转换为相关的显示字符

.net - Visual Studio 生成的 Web 服务客户端线程安全吗?

C# 无法读取 MVC 中的 App.config 文件

c# - 将窗体控件绑定(bind)到对象的属性

c# - 如何从 Excel VBA 调用 .NET 方法?

c# - .net C# 拆分 xml 文件

c# - WCF方法未接收参数

.net - 在 Visual Studio 2010 Ultimate 中找不到负载测试

C# 防止 AppDomain 程序集的类实例进行文件访问

c# - .net4 中未调用托管 C++ 静态构造函数