你好,我在运行一个NAnt脚本时会遇到一些问题,这个脚本曾用于正确构建基于.Net 2.0的网站,当使用VS2008及其相关工具进行编译时.我最近将所有项目/解决方案文件升级到VS2010,现在我的构建失败并出现以下错误:
[exec] C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(2249,9):错误MSB3086:任务无法使用S dkToolsPath""或注册表找到"sgen.exe"键"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A".确保已设置SdkToolsPath,并且该工具位于SdkToolsPath下正确的处理器特定位置,并且已安装Microsoft Windows SDK
现在,我已经在构建服务器上安装了Windows SDK的早期版本(.Net 3.5),并且安装了完整的.Net 4.0框架,但我没有遇到.Net 4.0特定版本的Windows SDK.
经过一些实验和研究,我终于设置了一个新的环境变量"SDKToolsPath"并将其指向我的Windows 6.0 sdk文件夹中的sgen.exe副本.这会产生相同的错误,但它让我注意到即使设置了SDKToolsPath环境变量(确认我可以在命令行"回显"它并且它具有预期的值),错误消息似乎表明它是没有被阅读(注意空引号).
我发现的大多数信息都是特定的.Net 3.5(或更早版本).还没有多少相关的4.0.搜索错误代码MSB3086也没有任何用处.知道这可能是什么吗?
斯科特
我正在寻找一个命令来运行MSBuild.exe,只需要一个MVC 4项目并将其发布到给定目录.
例如,
MSBuild <solution>/<project>.csproj -publish -output=c:/folder
Run Code Online (Sandbox Code Playgroud)
这显然是不正确的语法.我正在努力简化我的问题.
这个问题讨论了构建XML,但我并没有尝试用这么多细节做任何事情.
我只是想尝试部署.
在那个问题中,有人说"MSDeploy".我可以调查一下,但这是唯一的选择吗?我无法在服务器上安装Web部署.在这种情况下,我真正需要做的就是"发布"并将已发布项目的内容发送到服务器/文件系统上的给定目录.
有没有人可以使用一个班轮?
我必须使用MSDeploy吗?
MSDeploy是否要求在服务器上安装Web部署?
不在服务器上设置Web部署需要设置一些端口,权限和安装一些IIS附加组件?
我喜欢简单地执行一些事情.
我正在尝试使用MSDeploy在TFS中的Team Build上部署Web应用程序.有几个问题解决了为了调用MSDeploy而必须在MSBuild中传递的属性,但是我没有找到足够的文档来说明可用的属性.有人有可用属性列表吗?
以下是我发现的一些问题,但我无法找到属性的确切列表:
伙计们,
简而言之,我想复制这个对话框:

这是一个Visual Studio 2010 ASP.Net MVC项目.如果我执行此命令,我将获得所需的所有文件,包括"C:\ ToDeploy"目录中的转换后的web.configs.
我想在命令行上复制它,以便我可以将它用于QA环境构建.
我已经在远程部署的命令行上看到了有关如何执行此操作的各种文章,但我只是想为文件系统部署执行此操作.
我知道我可以使用nAnt任务或rake脚本复制这个功能,但是我想用这个机制来做,所以我不重复自己.
我已经对此进行了一些调查,我发现了这些链接,但没有一个能够干净地解决它:
提前致谢!
command-line visual-studio-2010 msdeploy web-publishing msbuild-wpp
我正在尝试在执行发布版本时自动发布我的Web应用程序.我正在使用_CopyWebApplication目标执行此操作.我将以下内容添加到我的.csproj文件中:
<!-- Automatically Publish in Release build. -->
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<Target Name="AfterBuild">
<RemoveDir Directories="$(ProjectDir)..\Output\MyWeb" ContinueOnError="true" />
<MSBuild Projects="MyWeb.csproj" Properties="Configuration=Release;WebProjectOutputDir=$(ProjectDir)..\Output\MyWeb;OutDir=$(ProjectDir)bin\" Targets="ResolveReferences;_CopyWebApplication" />
</Target>
Run Code Online (Sandbox Code Playgroud)
这有效,但有一个问题.此输出与在Visual Studio中使用"发布"菜单项时生成的输出之间的差异在于,在使用MSBuild方法时,Web.Release.config转换不会应用于Web.config文件.而是复制了Web.config,Web.Release.config和Web.Debug.config.
任何想法都表示赞赏.
我正在尝试将我的解决方案中的一个Web项目部署到服务器.我在TeamCity上使用msbuild就像这样:
msbuild MySolution.sln /t:WebSite:Rebuild /p:DeployOnBuild=True /p:PublishProfile=Prod ...
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,msbuild仍然尝试构建我的WebService项目,即使我的WebSite项目不依赖它(但它确实依赖于Services项目也在解决方案中).如何只发布一个项目,又称公正WebSite?
我也尝试使用构建项目文件
msbuild WebSite/WebSite.csproj /p:DeployOnBuild=True ...
Run Code Online (Sandbox Code Playgroud)
但它然后抱怨它无法恢复包:
[07:47:17]WebSite\WebSite.csproj.teamcity: Build target: Build
[07:47:17][WebSite\WebSite.csproj.teamcity] RestorePackages
[07:47:17][RestorePackages] Exec
[07:47:17][Exec] C:\TeamCity\buildAgent\work\cab8a3d752df3a51\.nuget\NuGet.targets(90, 15): error MSB4064: The "LogStandardErrorAsError" parameter is not supported by the "Exec" task. Verify the parameter exists on the task, and it is a settable public instance property.
[07:47:17][Exec] C:\TeamCity\buildAgent\work\cab8a3d752df3a51\.nuget\NuGet.targets(89, 9): error MSB4063: The "Exec" task could not be initialized with its input parameters.
[07:47:17][WebSite\WebSite.csproj.teamcity] Project WebSite\WebSite.csproj.teamcity failed. …Run Code Online (Sandbox Code Playgroud) 我正在TeamCity中构建一个ASP.Net MVC项目.
我可以以某种方式调用Publish目标并将输出复制到IIS下的文件夹中吗?或者我需要为此编写一个msbuild脚本吗?
在Web上的其他地方,您可以找到使用类似这样的东西的建议来从命令行模拟VS 2005-2008 IDE中的发布功能(我希望我没有搞砸语法!):
msbuild /t:ResolveReferences;_CopyWebApplication /p:BuildingProject=true;OutDir=C:\inetpub\wwwroot\ blah.csproj
Run Code Online (Sandbox Code Playgroud)
现在,看起来.dll的副本很好.但是,有一些配置文件和模板文件被复制到bin文件夹,这是应用程序工作所需的.例如,NHibernate配置文件在blah.csproj中显示为:
<None Include="blah.cfg.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
Run Code Online (Sandbox Code Playgroud)
虽然在IDE中使用Publish会按原样复制此文件,但前面提到的_CopyWebApplication目标却没有.我需要在构建脚本中复制此文件.这是_CopyWebApplication的理想行为吗?有关如何解决此问题的任何建议?
编辑4/21/2010:
让我澄清一下,我们对VS 2005和VS 2008项目的限制(目前),以及我们的构建脚本是为MSBuild 3.x编写的.我们尚未准备好转向VS 2010.
我还要指出,我们正在寻找可在命令行中使用的解决方案,以便我们可以自动执行类似发布的命令以及自定义构建选项,并可能在未来实现自动化部署.
对于VS2010,在我利用Web部署项目(WDP)帮助打包我的网站进行生产部署之前.我有一个MSBuild脚本,它在发布模式下编译了解决方案.其输出是由WDP编译和清理的生产就绪网站文件.
我看到2012年WDP已被删除,并且已在Web应用程序的属性中创建了一个新选项卡.选项是相同的,但现在通过Publish选项(在刚刚在发布模式下编译之前)调用它.
所以问题是这个.从MSBuild脚本,我如何调用发布操作?我发现了一些旧帖子......
msbuild /target:publish
Run Code Online (Sandbox Code Playgroud)
会做的伎俩.但这似乎在2012年没有奏效.
另外,我尝试了我的msbuild任务......
<MSBuild Properties="Configuration=Publish;"
StopOnFirstFailure="true"
Projects="$(BuildDirectory)\MySolution.sln"></MSBuild>
Run Code Online (Sandbox Code Playgroud)
......但msbuild刚刚报道了"未知配置".
如何msbuild从命令行运行发布选项?
我的设置是:我有一个解决方案,其中包含不同的dotnet4.6应用程序(服务)。现在,我们在此解决方案中添加了一个dotnet核心项目。我可以构建和调试它,但这不会创建可执行文件。在Visual Studio中,我可以右键单击->发布...。我创建了两个配置文件(x86和x64),它们应该在/ bin / Publish / x86或/ x64中创建漂亮的二进制文件。在VS中有效。该应用程序是独立的,可以在未准备好的其他计算机上运行。
但是现在我需要将该过程移至构建服务器。我搞砸了,dotnet publish但最后我被卡住了,因为该解决方案的其他组件不是干净的dotnet核心,因此构建失败。因此,我需要坚持使用MSBuild。
当前尝试是:
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe" NewProject\NewProject.csproj /p:DeployOnBuild=true /p:UsePublishProfile=true /p:PublishProfile=x64Profile。
这表明它已成功完成构建,但是我看不到任何结果。如果我删除所有属性并仅调用msbuild和* .csproj,也没有任何区别。它只是在bin / Debug中以dll(而不是exe)构建新项目。
我也弄乱了p:PublishProfile="NewProject\Properties\PublishProfiles\x64Profile.pubxml",/p:PublishUrl="NewProject\bin\Publish\x64"但它没有任何改变。
我读了几篇关于SO的文章,告诉我VS不仅使用参数调用msbuild,而且还进行内部API调用。不过,我需要一个解决方案。我需要构建服务器来创建可执行文件。有没有一种方法可以触发msbuild创建该对象?
我们目前将 ASP.NET Core 产品部署到:
我们有一个“站点”,其下有多个应用程序。每个应用程序都使用自己的应用程序池,并映射到不同的物理文件夹路径位置。
每个应用程序都由其自己的源代码 ASP.NET Core Server 项目表示
IIS结构
我们使用 Jenkins 进行 CI/CD,这是无法更改的。我们有 Powershell 脚本与 IIS 交互
没有 IIS 命令可以停止应用程序,只有站点,但我们理想情况下不希望在发布单个应用程序的新版本时关闭该站点。我们只想关闭该特定应用程序。
我们尝试通过停止与应用程序关联的 WebAppPool,然后等待(2 分钟...然后 5 分钟)来实现此目的。但即使在此之后,应用程序文件仍然被锁定。
我们最终关闭了 WebAppPool 和站点以释放文件,以便可以替换它们。
我知道必须有更好的方法来做到这一点。我们如何关闭单个应用程序,并阻止新的请求到达它,以便我们可以替换文件然后重新启动它?尽管“SITE”及其下的任何其他应用程序未更新,但仍在运行。我不介意更新应用程序的停机时间。
更新日期 6/8/2022
发现这个: https: //learn.microsoft.com/en-us/aspnet/core/host-and-deploy/app-offline? view=aspnetcore-6.0
去看看这是否可以解决我的问题。
我目前遇到一个问题,我在同一个解决方案 Visual Studio 2017 中有一个 mvc 项目和一个 API 项目。当我构建解决方案时,结构如下解决方案解决方案/区域1解决方案/区域2解决方案/api我能够仅在本地计算机上构建时,可以毫无问题地访问 api,但是当我发布解决方案时,api 项目会构建 dll,但不会构建解决方案/api,因此我无法导航到我的 api 调用。我尝试设置多个启动解决方案,但没有解决问题。
msbuild ×7
msdeploy ×4
.net ×2
c# ×2
publish ×2
teamcity ×2
.net-core ×1
asp.net ×1
asp.net-core ×1
asp.net-mvc ×1
command-line ×1
deployment ×1
iis-8 ×1
msbuild-wpp ×1
target ×1
tfs ×1
webdeploy ×1