如何从NAnt获取VS2010 Web.config转换?

时间:2010-06-09 16:49:02

标签: visual-studio-2010 msbuild nant

在我的Nant文件中,我得到了(路径缩短):

<echo message="#### TARGET - compile ####"/>
<echo message=""/>
<echo message="Build Directory is ${build.dir}" />

<exec program="${framework}\msbuild.exe"
      commandline="..\src\Solution.sln /m /t:Clean /p:Configuration=Release" />

<exec program="${framework}\msbuild.exe"
      commandline="..\src\Solution.sln /m /t:Rebuild  /p:Configuration=Release" />

<exec program="${framework}\msbuild.exe"
      commandline="..\src\Solution.sln /m /t:TransformWebConfig /p:Configuration=Release" />

结果是:

Build FAILED.       "C:\..\src\Solution.sln" (TransformWebConfig target) (1) ->         C:\..\src\Solution.sln.metaproj : error MSB4057: The target "TransformWebConfig" does not exist in the project. [C:\..\src\Solution.sln]    0 Warning(s)    1 Error(s)Time Elapsed 00:00:00.05

解决方案和相关项目都是VS2010,Web应用程序甚至在.csproj中都有正确的引用:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

这应该不起作用吗?

2 个答案:

答案 0 :(得分:4)

你不能,这不是特定于NAnt的问题,你只是不能在解决方案文件上调用TransformWebConfig

解决方案:

  • 在项目文件中调用它:

     <exec program="${framework}\msbuild.exe"
           commandline="..\src\WebApp\WebApp.csproj /m /t:TransformWebConfig /p:Configuration=Release" />
    
  • 覆盖项目文件中的AfterBuild目标以调用TransformWebConfig:

    <Target Name="AfterBuild">
      <CallTarget Targets="TransformWebConfig"/>
    </Target>
    

答案 1 :(得分:3)

我无法使用TransformWebConfig选项和AfterBuild目标,但是,这个post是我的答案。简而言之,这就是我的“构建”目标在Nant中的样子:

<target name="build" description="Compiles/Builds the Solution">
<echo message="Building..." />
<property name="build.configuration" value="Release" />

<msbuild project="${path::combine(staging.project,'_solutions\mySolutionName.sln')}" verbosity="minimal" failonerror="true" verbose="false">
    <arg value="/p:Configuration=${build.configuration};OutputPath=${path::combine(staging.output,'bin')}" />
    <arg value="/p:UseWPP_CopyWebApplication=True" />
    <arg value="/p:PipelineDependsOnBuild=False" />
    <arg value="/p:WebProjectOutputDir=${staging.output}\" />
    <arg value="/t:Rebuild" />
    <arg value="/nologo" />
</msbuild>
<echo message="Building finished..." />

网站运行所需的所有文件都将复制到指定的“WebProjectOutputDir”属性中,包括应用了转换的web.Config。它就像一个魅力:)

-Diego