Asp.net 网络部署项目&;团队城市

Asp.net 网络部署项目&;团队城市,asp.net,msbuild,teamcity,web-deployment-project,Asp.net,Msbuild,Teamcity,Web Deployment Project,我正在尝试为解决方案构建一个WebDeploymentProject2010项目。我已在生成服务器上安装了Windows SDK和Web部署项目2010 RTW,并复制了MSBuild缺少的.target文件 当试图构建项目时,它会抛出以下错误 C:\Program Files\MSBuild\Microsoft\WebDeployment\v10.0\Microsoft.WebDeployment.targets(1589,9):错误MSB6004:指定的任务可执行文件位置“C:\Progra

我正在尝试为解决方案构建一个WebDeploymentProject2010项目。我已在生成服务器上安装了Windows SDK和Web部署项目2010 RTW,并复制了MSBuild缺少的
.target
文件

当试图构建项目时,它会抛出以下错误

C:\Program Files\MSBuild\Microsoft\WebDeployment\v10.0\Microsoft.WebDeployment.targets(1589,9):错误MSB6004:指定的任务可执行文件位置“C:\Program Files\MSBuild\Microsoft\WebDeployment\v10.0\aspnet\u merge.exe”无效


不幸的是,在谷歌搜索关于这个错误的结果并没有揭示出任何有价值的东西。如果您能帮助TeamCity成功构建web部署项目,我们将不胜感激。

好的,您的aspnet\u合并被指向了错误的位置-在我的构建脚本中,我有一些结果如下:

<ItemGroup>
    <ASPNETPath Include="F:\Program Files\Microsoft SDKs\Windows\v6.0A\bin" />
</ItemGroup>

<Target Name="ASPNET Merge">
    <AspNetMerge
      ExePath="@(ASPNETPath)"
      ApplicationPath=".\Release"
      SingleAssemblyName="CoreMicrosite"
      />
</Target>


请尝试更改文件“Microsoft.WebDeployment.targets”第1562行的以下节点:



更合适的解决方案应该是在.wdproj文件中设置
targetFrameworkDKDirectorybin
属性。例如:

<TargetFrameworkSDKDirectoryBin>C:\Programmi\Microsoft SDKs\Windows\v7.1\Bin\</TargetFrameworkSDKDirectoryBin>
C:\Programmi\Microsoft SDK\Windows\v7.1\Bin\
在.dtproj文件中使用的此设置将覆盖在Microsoft.WebDeployment.targets中定义的默认设置,如您在此处所见

<Target
  Name="GetAspNetMergePath"
  DependsOnTargets="$(GetAspNetMergePathDependsOn)">
  <PropertyGroup>
      <AspnetMergeName>aspnet_merge.exe</AspnetMergeName>
      <AspnetMergePath>$(MSBuildExtensionsPath)\Microsoft\WebDeployment\v10.0</AspnetMergePath>
      <AspnetMergePath Condition="Exists('$(TargetFrameworkSDKDirectoryBin)$(AspnetMergeName)')">$(TargetFrameworkSDKDirectoryBin)</AspnetMergePath>
  </PropertyGroup>
</Target>

aspnet_merge.exe
$(MSBuildExtensionsPath)\Microsoft\WebDeployment\v10.0
$(TargetFrameworkDKDirectoryBin)

第二个
AspnetMergePath
表示,如果在其他地方存在指向现有aspnet_merge.exe文件的
$(targetFrameworkDKDirectorybin)
,则将使用该文件。

Cool,我在
Microsoft.WebDeployment.targets
NETFX 4.0 Tools
目录中为
aspnet\u merge.exe
设置了
ExePath
,它现在正在正确构建。感谢+1,因为其他答案假设aspnet_merge.exe在开发人员机器和生成服务器上位于同一位置。这解决了问题,但请注意,最新的SDK是7.1,而不是7.0A。
<Target
  Name="GetAspNetMergePath"
  DependsOnTargets="$(GetAspNetMergePathDependsOn)">
  <PropertyGroup>
      <AspnetMergeName>aspnet_merge.exe</AspnetMergeName>
      <AspnetMergePath>$(MSBuildExtensionsPath)\Microsoft\WebDeployment\v10.0</AspnetMergePath>
      <AspnetMergePath Condition="Exists('$(TargetFrameworkSDKDirectoryBin)$(AspnetMergeName)')">$(TargetFrameworkSDKDirectoryBin)</AspnetMergePath>
  </PropertyGroup>
</Target>