MSBuild参数生成文件

17

注: 这是一个带有MVC Web应用程序和其他几个项目的Visual Studio 2017解决方案,其中并非所有项目都被Web应用程序项目引用。直到现在,我一直在使用VS直接发布到测试服务器,但我已将其移动到VSTS,并设置了构建和发布定义,但尚未起作用。

我想要实现的目标是让我的(托管的)VSTS构建代理生成可以简单地复制到其目标位置的已发布文件,而不是(on-prem)发布代理。因此,我正在尝试从VS命令行本地测试MS构建步骤,以便产生文件并记录它们所在的路径。也许我把这个问题搞得比它需要的更复杂了?

这些选项将创建一个单独的压缩存档及其相关文件,并将其放置在工件暂存目录中。是否有一种方法可以直接发布文件,而无需将它们放入存档中-并直接放入工件暂存目录中?

Visual Studio Build

MSBuild parameters

/t:My_MVCWeb_Project_Name /p:DeployOnBuild=true 
/p:WebPublishMethod=FileSystem /p:PackageAsSingleFile=true 
/p:SkipInvalidConfigurations=true 
/p:PackageLocation="$(build.artifactstagingdirectory)\\"

在我的发布(使用本地代理)中,我有一个“复制文件”任务,目标是IIS应用程序所在的UNC路径。但这只会复制存档文件。那么,我该如何像使用发布配置文件一样直接将文件复制到应用程序目录中?

[更新2 - 仍然生成zip文件]

MSBuild my_solution_name /t:"my_project_name" /p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:SkipInvalidConfigurations=true /p:PackageLocation="D:\temp\local-dev-build-dir"

[更新3] 作为测试,尝试从命令行运行这些内容,但是没有生成任何东西。

msbuild D:\app_dir>MSBuild my_solution_name.sln /t:"my_web_proj_name" /p:SkipInvalidConfigurations=true /p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl="D:\temp\app_build_dir\\" 
/p:DeployDefaultTarget=WebPublish  
2个回答

11

删除

/p:PackageAsSingleFile=true 

或者将它改为:
/p:PackageAsSingleFile=false 

这导致文件被压缩。

您可能还需要切换发布方式为“package”:

/p:OutDir=$(build.artifactstagingdirectory) 
/p:WebPublishMethod=Package

我现在正在手动测试,通过在本地git存储库中从命令行运行MSBuild。我将PackageLocation设置为本地文件夹,但它仍然生成一个zip文件。 - bitshift

10

改用以下这些 MSBuild 参数:

/p:SkipInvalidConfigurations=true /p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactstagingdirectory)\\" /p:DeployDefaultTarget=WebPublish

请参见上面的 [更新3],尝试从命令行运行但没有任何输出。 - bitshift
这是一个网站还是网页应用项目?你能在 OneDrive 上分享一个样例项目吗? - starian chen-MSFT
这是一个MVC5 Web应用程序,位于其他项目的解决方案中,并且该项目引用了其他项目。请参见上面更新的描述。 - bitshift
你能在OneDrive上分享示例项目和详细的构建日志(将system.debug变量设置为true)吗? - starian chen-MSFT
1
@starianchen-MSFT,我的解决方案结合了控制台应用程序和 Web API(在同一个解决方案下)/p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish/p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:msbuildArchitecture=x64 /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\"。我正在使用上述生成参数,但是我只看到非 Web API 项目出现在下拉列表中。 - Venkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接