【问题标题】:dotnet publish with /p:PublishProfile=?dotnet 使用 /p:PublishProfile=? 发布
【发布时间】:2021-10-26 21:15:12
【问题描述】:

我正在尝试使用此处记录的特定发布配置文件 pubxml 文件调用“dotnet publish”:

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-2.1&tabs=aspnetcore2x

但是,我尝试的一切似乎都会导致默认行为,并且 /p:PublishProfile 部分被忽略。

dotnet publish /p:PublishProfile="MyFolderProfile"

不工作,并且不记录错误,构建到“/obj”下的默认位置。

我确实注意到故意不正确的命令具有相同的结果,例如:

dotnet publish /p:PublishProfile="MyFolderProfile-XXXXX"

我做错了什么? - 任何指针将不胜感激!

【问题讨论】:

  • 当然,这不是一个解决方案,但我最终手动列出了所有选项(发布、输出目录等)
  • 您是否尝试过指定构建配置文件的项目?像这样:dotnet publish WebApplication.csproj /p:PublishProfile="MyFolderProfile"
  • @VictorAlves 我不是最初的发帖人,但我已经尝试在命令行中使用该项目,但这也无济于事。似乎问题是一个长期存在的问题,即使使用 msbuild:github.com/Microsoft/msbuild/issues/1901 似乎您必须在命令行上手动指定参数,例如-c Release/p:PublishDir=dist
  • 我只遇到过微软软件的这些问题。

标签: c# asp.net-core .net-core


【解决方案1】:

我的回复晚了。我的解决方案有一个简单的 .NET Core 控制台应用程序ConsoleAppCore.csproj。我使用Visual Studio IDE 生成了一个名为FolderProfile.pubxml 的发布配置文件,然后以下命令对我有用:

相对路径 - 从解决方案根目录

dotnet publish ConsoleAppCore\ConsoleAppCore.csproj /p:PublishProfile=ConsoleAppCore\Properties\PublishProfiles\FolderProfile.pubxml

绝对路径 - 从任何位置

dotnet publish "C:\work\ConsoleAppCore\ConsoleAppCore.csproj"   "/p:PublishProfile=C:\work\ConsoleAppCore\Properties\PublishProfiles\FolderProfile.pubxml"

在 Azure 开发操作上

任务名称=.NET Core

任务版本=2

命令=发布

项目路径=我把这个留空了

参数=

$(System.DefaultWorkingDirectory)\ConsoleAppCore\ConsoleAppCore.csproj /p:PublishProfile=$(System.DefaultWorkingDirectory)\ConsoleAppCore\Properties\PublishProfiles\FolderProfile.pubxml  --configuration $(BuildConfiguration) --output  $(Build.ArtifactStagingDirectory)\ConsoleAppCore-Publish\

Azure Dev Ops 构建管道方案中,我已将输出重定向到 $(Build.ArtifactStagingDirectory) 下的文件夹。我还有一个 Publish Artifact 任务,它被配置为使用暂存目录变量。

我使用了发布配置文件 XML 文件,因为我想要一个文件来管理在 Azure Devops 上的完整行为。所有参数都依赖于一个文件可以简化 Azure 上的管理。

Azure 开发操作 - 工件资源管理器

Publish Artifact 任务为我创建了一个 drop,这就是它的外观。请注意,资源管理器中的文件名与 dotnet publish 任务中指定的名称以及 --output 选项一致

【讨论】:

  • 不幸的是,这在 linux 上似乎并没有以同样的方式工作。发布配置文件将被忽略。
  • 我不能代表 Linux,但这是让它在 Windows 上运行的最可靠方法。
  • “相对路径 - 从解决方案根”解决方案对我有用!谢谢
  • 看起来完整/相对路径现在不应该工作,根据docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish“如果您在设置PublishProfile属性时指定路径和文件扩展名,它们将被忽略。默认情况下MSBuild看起来在 Properties/PublishProfiles 文件夹中并假定 pubxml 文件扩展名。要指定包含扩展名的路径和文件名,请设置 PublishProfileFullPath 属性而不是 PublishProfile 属性。 "
【解决方案2】:

不久前我遇到了同样的问题。我设法通过调用来解决它:

dotnet build [projectname] /p:PublishProfile=[PublishProfile]

【讨论】:

【解决方案3】:

您可能需要完整路径,例如

dotnet publish -c Release /p:PublishProfile=Properties\PublishProfiles\FolderProfile.pubxml

【讨论】:

  • 不指定 sln 或 csproj 文件?
  • @AndersLindén 是的,我不需要指定,但我可能在目录中只有一个 .csproj 文件
【解决方案4】:

文件夹发布存在一个未解决的问题(截至 2021 年 10 月),具有类似的症状 https://github.com/dotnet/sdk/issues/12490

我现在使用的解决方法是手动编辑 VS.Net 生成的 *.pubxml 文件,以使 PublishUrlPublishDir 键具有相同的值。

有了这个dotnet publish -p:PublishProfile=... 按预期工作。

【讨论】:

  • 这是对我的修复。谢谢!
【解决方案5】:

试试这个基于:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-3.1#publish-profiles

dotnet build ..\project\project.csproj /p:DeployOnBuild=true -c Release /p:PublishProfile="Folder Staging"

我包含了一个相对的 csproj 路径和一个带有空格的发布配置文件名称,以阐明如何处理这些情况。 -c 标志可选地用于指定要使用的配置。

【讨论】:

    【解决方案6】:

    https://github.com/dotnet/docs/issues/19677。 PublishProfile 只是名称,之前的任何目录都被忽略。

    PublishProfile 属性被视为文件名,目录为 单独构造。

    如果指定自定义路径,则应使用PublishProfileFullPath 属性。

    【讨论】:

      【解决方案7】:

      我在 VS 构建事件中使用了它

      dotnet publish $(SolutionDir)DIRECTORI_1/PROJECT_1.csproj -c Release -o C:\Deployments\FOLDER_1
      

      【讨论】:

        猜你喜欢
        • 2018-11-29
        • 2021-08-26
        • 1970-01-01
        • 2020-09-13
        • 2018-09-22
        • 2022-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多