使用 MsBuild 使用命令行进行发布时出现问题单击一次
Posted
技术标签:
【中文标题】使用 MsBuild 使用命令行进行发布时出现问题单击一次【英文标题】:Problems using MsBuild using command line for Publish Click Once 【发布时间】:2010-01-25 08:18:21 【问题描述】:我的解决方案中有 csproj 中的 Windows 应用程序,我想使用命令行(bat、cmd)生成发布。
我的脚本是(我输入\r\n
以便更好地阅读):
SET MSBUILD="%SystemRoot%\Microsoft.NET\Framework\v3.5\MSBuild.exe"
SET CARWIN="..\..\Security.CarWin.csproj"
rem msbuild para publish
%MSBUILD% /target:rebuild;publish %CARWIN%
/p:ApplicationVersion="1.0.0.0"
/p:Configuration=release
/p:PublishUrl="C:\ClickOnce\CarWin.WebInstall\Publicacion\"
/p:InstallUrl="http://desserver/carwinclickonce/Publicacion/"
/p:PublishDir="C:\ClickOnce\CarWin.WebInstall\Publicacion\"
注意:我也会尝试使用/target:publish
但在路径 PublishDir 或 PublishUrl (C:\ClickOnce\CarWin.WebInstall\Publicacion) 中不会生成任何文件。
我在这个网站和谷歌上看到了很多帖子,但我没有找到任何解决方案。
【问题讨论】:
MSBuild doesn't respect PublishUrl property for my ClickOnce app的可能重复 【参考方案1】:从命令行运行时使用 PublishDir 而不是 PublishUrl。
msbuild /target:publish /p:Configuration=Release;PublishDir=c:\playground\
您还可以更改版本,例如 ApplicationRevision=666;MinimumRequiredVersion=1.1
【讨论】:
对于 PublishDir,有结尾“\”很重要 如何在 msbuild 命令中指定 minimumRequiredVerison?我尝试了上述建议,但没有奏效。【参考方案2】:看看this Stack Overflow question。从命令行运行 ClickOnce 时,基本上会忽略 PublishUrl
属性。但您可以通过额外的 MSBuild 任务轻松添加行为。
我创建了一个额外的 MSBuild 文件,例如 build.csproj
。这包含一个publish-task
。此任务首先调用目标项目的常规 MS-Build。然后它将结果复制到发布目录。现在我从命令行调用“build.csproj”而不是 reguar 项目文件:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Publish" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!-- project name-->
<ProjectName>MyExampleProject</ProjectName>
<!--properties for the project-build-->
<DefaultBuildProperties>Configuration=Release</DefaultBuildProperties>
<!-- location of the click-once stuff, relative to the project -->
<ProjectPublishLocation>.\bin\Release\app.publish</ProjectPublishLocation>
<!-- Location you want to copy the click-once-deployment. Here an windows-share-->
<ProjectClickOnceFolder>\\TargetServer\deployments</ProjectClickOnceFolder>
</PropertyGroup>
<Target Name="Publish" DependsOnTargets="Clean">
<Message Text="Publish-Build started for build no $(ApplicationRevision)" />
<!-- run the original build of the project -->
<MSBuild Projects="./$(ProjectName).csproj"
Properties="$(DefaultBuildProperties)"
Targets="Publish"/>
<!-- define the files required for click-once-->
<ItemGroup>
<SetupFiles Include="$(ProjectPublishLocation)\*.*"/>
<UpdateFiles Include="$(ProjectPublishLocation)\Application Files\**\*.*"/>
</ItemGroup>
<!-- and copy them -->
<Copy
SourceFiles="@(SetupFiles)"
DestinationFolder="$(ProjectClickOnceFolder)\"/>
<Copy
SourceFiles="@(UpdateFiles)"
DestinationFolder="$(ProjectClickOnceFolder)\Application Files\%(RecursiveDir)"/>
</Target>
<Target Name="Clean">
<Message Text="Clean project" />
<MSBuild Projects="./$(ProjectName).csproj"
Properties="$(DefaultBuildProperties)"
Targets="Clean"/>
</Target>
</Project>
【讨论】:
太好了,我想知道只使用目标项目的发布位置而不是在此处指定它是否可行...?【参考方案3】:不知道是不是这个问题,但是我注意到你把/target参数传递了两次?
您可以使用分号分隔的示例:
/target:rebuild;publish
MSDN Documentation on command line parameters and MSBuild
如果这也不起作用,您也许可以尝试通过传递来调试它
/verbosity:diag
【讨论】:
我尝试 /target:rebuild;publish 并且仅 /target:publish 但不生成文件发布。有什么想法吗?谢谢!!! 使用 /verbosity:diag 运行它并发布输出 输出的日志文件大小超过 1 MB !!!不可能在这里发布...问题..我没有将其发布在我放入 cmd 文件的文件夹中...谢谢。以上是关于使用 MsBuild 使用命令行进行发布时出现问题单击一次的主要内容,如果未能解决你的问题,请参考以下文章
尝试通过 c++ 程序中的 system() 函数使用 cl Visual Studio 命令进行命令行构建时出现 vcvars32.bat 问题
从命令行守护程序使用 MLMediaLibrary 时出现 XPC 错误
在 MSBuild、Team Build 和 TFS 中使用 PFX 文件对程序集进行签名