TFS构建服务器2015-不正确的转换web.config

时间:2018-08-21 07:36:40

标签: c# tfs visual-studio-2017 tfsbuild web.config-transform

我在TFS 2015构建服务器上执行“ Visual Studio构建”任务时遇到问题。当我在构建服务器上构建项目时,它不会将转换后的web.config发布到正确的文件夹中。我有两个web.configs-> web(base).Debug.config和web(base).Release.config。

在以下文件夹中,我希望转换后的web.config::... \ TFS2015BuildAgent \ work {tasknummer} \ a_PublishedWebsites {后端解决方案} \ web.config 但是,转换后的web.config位于以下文件夹中:... \ TFS2015BuildAgent \ work {tasknummer} \ a_PublishedWebsites \ web.config

solution.csproj -file具有以下几行:

...
...
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>  
    <PlatformTarget>AnyCPU</PlatformTarget>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>
...
...
...

  <Target Name="PostTransformAppConfig" AfterTargets="Build">
    <CallTarget Targets="TransformWebConfig" />
    <Copy Condition="Exists('$(TransformWebConfigIntermediateLocation)\transformed\webbase.config')" SourceFiles="$(TransformWebConfigIntermediateLocation)\transformed\webbase.config" DestinationFiles="Web.config" />
    <Copy Condition="Exists('$(TransformWebConfigIntermediateLocation)\transformed\webbase.config')" SourceFiles="$(TransformWebConfigIntermediateLocation)\transformed\webbase.config" DestinationFiles="$(OutDir)\Web.config" />
    <Copy Condition="Exists('$(TransformWebConfigIntermediateLocation)\transformed\webbase.config')" SourceFiles="$(TransformWebConfigIntermediateLocation)\transformed\webbase.config" DestinationFiles="$(OutDir)\_PublishedWebsites\$(AssemblyName)\Web.config" />
  </Target>
...
...
...

  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" Condition="false" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
  <PropertyGroup>
    <PreBuildEvent>attrib -R "$(ProjectDir)Web.config"</PreBuildEvent>
  </PropertyGroup>

在TFS服务器上,Visual Studio Build任务的规格如下:

  • Visual Studio版本:Visual Studio 2017
  • MSBuild参数:/p:OutDir=$(build.stagingDirectory)/ p:SkipInvalidConfigurations = true / p:AllowedReferenceRelatedFileExtensions = none / p:DeployOnBuild = true
  • 平台:任何CPU
  • 配置:发布
  • 清洁:正确
  • MSBuild体系结构:MSBuild x86

当我在VS 2017中构建项目(本地)时,将正确转换web.config。同样,在本地发布它时,也可以根据Debug或Release配置正确转换web.config。

但是,我为此TFS服务器上的其他项目创建了多个构建定义,包括转换web.config。在所有其他项目上,web.config文件已正确/按预期进行了转换。...

所以我可能丢失了一些东西……但是什么?

1 个答案:

答案 0 :(得分:0)

经过几个小时的搜索,问题在于$(AssemblyName)错误定义,因此配置文件被复制到错误的文件夹中。

本地构建/发布可能没有问题,但是如果有不正确的AssemblyName,则在构建服务器上会出错。