dotnet cli 发布命令与 Visual Studio 发布

Posted

技术标签:

【中文标题】dotnet cli 发布命令与 Visual Studio 发布【英文标题】:dotnet cli publish command vs visual studio publish 【发布时间】:2019-04-08 12:52:45 【问题描述】:

我正在为一个包含 Angular 的 .NET core 2.2 Web 应用程序设置 Azure devops 构建管道,它运行的步骤之一是 dotnet publish。然而,与直接从 VS 2017 运行发布相比,最终结果并不是我所期望的。

作为针对特定环境运行自定义 npm 命令的一种方式。所以在我的 csproj 文件中我有这个

  <Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
    <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
    <!-- Use conditional builds based on build target setting eg.  debug, dev, prod etc -->
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build " Condition=" '$(Configuration)' == 'Debug' " />
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build --prod false --configuration=dev" Condition=" '$(Configuration)' == 'Test' " />
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build --prod true --configuration=prod" Condition=" '$(Configuration)' == 'Release' " />
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:s-s-r --configuration=prod" Condition=" '$(BuildServerSideRenderer)' == 'true' And  '$(Configuration)' == 'Release' " />

但是,devops 构建没有运行正确的命令。查看构建日志后,它只是运行 ng build,不包括针对特定配置的额外标志。

为了确认这一点,我在命令行运行了

dotnet 发布 -c 测试

,果然,输出表明它运行了 ng build,似乎没有使用 csproj 文件中的内容。

那么我怎样才能让我的 npm 命令获取类似 csproj 文件中的配置值,但是当 dotnet publish 运行时?

【问题讨论】:

问题:有什么理由你不能明确地使用 npm 任务并将它们完全排除在 csproj 之外?我强烈建议您完全控制命令。如果你真的必须通过 csproj 来做,我会在 package.json 中创建不同的命令,并将它们称为“buildTest”、“buildProd”等。只需将 csproj 的命令部分保留为“npm run buildTest”、“ npm 运行 buildProd”。这样,您就不必担心构建系统会丢弃参数。 是的,我只是在考虑。我现在正在尝试……它有效!惊人的!将您的回复移动为答案,谢谢 太棒了,现在将推荐添加为答案。 【参考方案1】:

我建议您将 npm 命令移动到 package.json 中,而不是尝试通过 MSBuild 获取参数。

"scripts": 
"buildTest": "npm run build --prod false --configuration=dev",
"buildProd": "npm run build --prod true --configuration=prod"

然后使用 csproj 只运行 npm run buildTestnpm run buildProd 等等。

【讨论】:

以上是关于dotnet cli 发布命令与 Visual Studio 发布的主要内容,如果未能解决你的问题,请参考以下文章

Angular-CLI 和 dotnet cli 如何编写命令同时观看? [复制]

visual studio code 命令行创建发布一个项目

如何使用 dotnet cli 命令以 VB.NET 语言创建 ASP.NET Core 项目?

没有对 Visual Studio 12 2013 的 DOTNET 绑定支持

dotnet cli与新vs2017 msbuild的关系

如何使用 Visual Studio ASP.NET Core 监视文件更改“dotnet watch”