我正在寻找一个针对MSBuild.exe
运行的命令,该命令只需要一个MVC 4项目并将其发布到给定目录。
例如,
MSBuild <solution>/<project>.csproj -publish -output=c:/folder
这显然是不正确的语法。我试图简化我的问题。
This question讨论构建XML,但我并没有尝试用这么多细节做任何事情。
我只是想尝试部署。
在that question中进一步向下,有人说&#34; MSDeploy&#34;。我可以调查一下,但这是唯一的选择吗?我无法在服务器上安装Web部署。在这种情况下,我真正需要做的就是&#34;发布&#34;并将已发布项目的内容发送到服务器/文件系统上的给定目录。
有没有人可以使用一个班轮?
我是否必须使用MSDeploy?
MSDeploy是否要求在服务器上安装Web部署?
不在服务器上设置Web部署需要设置一些端口,权限和安装某些IIS附加组件吗?
我喜欢执行简单的事情。
答案 0 :(得分:145)
在VS 2012中(以及VS {2010的Azure SDK中提供的发布更新),我们简化了Web项目的命令行发布。我们通过使用发布配置文件完成了这项工作。
在VS for web项目中,您可以使用发布对话框创建发布配置文件。创建该配置文件时,它会自动存储在Properties \ PublishProfiles下的项目中。您可以使用创建的配置文件从命令行发布以下命令行。
msbuild mysln.sln /p:DeployOnBuild=true /p:PublishProfile=<profile-name>
如果要将发布配置文件(.pubxml文件)存储在其他位置,可以将路径传递给PublishProfile。
发布配置文件是MSBuild文件。如果需要自定义发布过程,可以直接在.pubxml文件中进行。
如果您的最终目标是从命令行传入属性。我会推荐以下内容。在VS中创建示例发布配置文件。检查发布配置文件以确定需要在命令行上传递的MSBuild属性。仅供参考,并非所有发布方法都支持命令行发布(即FTP / FPSE)。
仅供参考。如果您正在构建.csproj / .vbproj而不是.sln并且您使用的是VS 2012,那么您也应该传入/p:VisualStudioVersion=11.0
。有关为何查看http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx。
答案 1 :(得分:10)
创建一个类似于
的build.xml文件启动Visual Studio命令提示符
运行msbuild build.xml
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="Build">
<PropertyGroup>
<Build>$(MSBuildProjectDirectory)\Build</Build>
<ProjectFile>MyProject.csproj</ProjectFile>
<ProjectName>MyProjectNameInVisualStudio</ProjectName>
<CopyTo>$(MSBuildProjectDirectory)\CopyTo</CopyTo>
</PropertyGroup>
<Target Name="Build">
<RemoveDir Directories="$(Build)"/>
<MSBuild Projects="$(ProjectFile)" Properties="Configuration=Release;OutputPath=$(Build);OutDir=$(Build)/"></MSBuild>
<Exec Command="robocopy.exe $(Build)\_PublishedWebsites\$(ProjectName) $(CopyTo) /e /is
if %errorlevel% leq 4 exit 0 else exit %errorlevel%"/>
</Target>
</Project>
答案 2 :(得分:1)
我发现说的答案是部署默认配置,即调试。 MSBuild似乎忽略了在发布配置文件中选择的配置。因此,我更改了命令以为部署指定正确的配置...
msbuild mysln.sln /p:Configuration=[config-name] /p:DeployOnBuild=true /p:PublishProfile=[profile-name]
其中config-name =版本或您创建的其他构建配置
答案 3 :(得分:0)
以下命令运作完美:
msbuild Myproject.sln /t:Rebuild /p:outdir="c:\outproject\\" /p:Configuration=Release /p:Platform="Any CPU"
答案 4 :(得分:0)
对于您需要构建的Web项目,如上所述,但您还需要打包/复制。我们使用文件副本,而不是“发布”......
也;我们使用DEBUG / RELEASE来构建网站;但后来实际环境,即“QA”或“PROD”来处理web.config转换。
所以我们最初用RELEASE构建它,然后用QA打包它 - 在下面的例子中。
<PropertyGroup>
<SolutionName>XXX.Website</SolutionName>
<ProjectName>XXX.Website</ProjectName>
<IisFolderName>XXX</IisFolderName>
<SolutionConfiguration>QA</SolutionConfiguration> <!--Configuration will be set based on user selection-->
<SolutionDir>$(MSBuildThisFileDirectory)..</SolutionDir>
<OutputLocation>$(SolutionDir)\bin\</OutputLocation>
<WebServer>mywebserver.com</WebServer>
</PropertyGroup>
<Target Name="BuildPackage">
<MSBuild Projects="$(SolutionDir)\$(SolutionName).sln" ContinueOnError="false" Targets="Clean;Rebuild" Properties="Configuration=Release" />
<MSBuild Projects="$(SolutionDir)\$(ProjectName)\$(ProjectName).csproj" ContinueOnError="false" Targets="Package" Properties="Configuration=$(SolutionConfiguration);AutoParameterizationWebConfigConnectionStrings=False" />
</Target>
<Target Name="CopyOutput">
<ItemGroup>
<PackagedFiles Include="$(SolutionDir)\$(ProjectName)\obj\$(SolutionConfiguration)\Package\PackageTmp\**\*.*"/>
</ItemGroup>
<Copy SourceFiles="@(PackagedFiles)" DestinationFiles="@(PackagedFiles->'\\$(WebServer)\$(IisFolderName)\$(SolutionConfiguration)\%(RecursiveDir)%(Filename)%(Extension)')"/>
</Target>
因此;