MSBuild 스크립트 및 VS2010 게시 apply Web.config Transform
VS 2010을 설치하고 TeamCity 빌드 통합을 위해 MSBuild 스크립트를 수정하는 중입니다.한 가지 예외를 제외하고는 모든 것이 잘 작동하고 있습니다.
빌드를 게시할 때 생성한 Web.conifg 변환 파일을 적용하고 싶다는 메시지를 MSBuild에 전달하려면 어떻게 해야 합니까...
컴파일된 웹 사이트를 생성하는 다음을 가지고 있지만 Web.config 웹을 출력합니다.debug.config and, Web.컴파일된 출력 디렉터리에 .config 파일(모두 3)을 릴리스합니다.스튜디오에서 파일 시스템에 게시를 수행하면 변환을 수행하고 Web.config를 적절한 변경과 함께 출력합니다.
<Target Name="CompileWeb">
<MSBuild Projects="myproj.csproj" Properties="Configuration=Release;" />
</Target>
<Target Name="PublishWeb" DependsOnTargets="CompileWeb">
<MSBuild Projects="myproj.csproj"
Targets="ResolveReferences;_CopyWebApplication"
Properties="WebProjectOutputDir=$(OutputFolder)$(WebOutputFolder);
OutDir=$(TempOutputFolder)$(WebOutputFolder)\;Configuration=Release;" />
</Target>
어떤 도움이라도...!
다른 방법으로도 가능하다는 것을 알고 있지만 가능하다면 새로운 VS 2010 방식을 사용하여 이 작업을 수행하고 싶습니다.
비슷한 정보를 찾다가 찾지 못했기 때문에 Visual Studio 2010 및 MSBuild 4.0과 함께 제공되는 .targets 파일을 찾아보았습니다.혁신을 수행할 MSBuild 작업을 찾을 수 있는 최적의 장소라고 생각했습니다.
제가 알기로는 다음과 같은 MSBuild 작업이 사용됩니다.
<Project ToolsVersion="4.0"
DefaultTargets="Deploy"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml"
AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
<PropertyGroup>
<ProjectPath>C:\Path to Project\Here</ProjectPath>
<DeployPath>C:\Path to Deploy\There</DeployPath>
<TransformInputFile>$(ProjectPath)\Web.config</TransformInputFile>
<TransformFile>$(ProjectPath)\Web.$(Configuration).config</TransformFile>
<TransformOutputFile>$(DeployPath)\Web.config</TransformOutputFile>
<StackTraceEnabled>False</StackTraceEnabled>
</PropertyGroup>
<Target Name="Transform">
<TransformXml Source="$(TransformInputFile)"
Transform="$(TransformFile)"
Destination="$(TransformOutputFile)"
Condition="some condition here"
StackTrace="$(StackTraceEnabled)" />
</Target>
</Project>
위의 내용을 테스트해 보았으며 작동하는지 확인할 수 있습니다.빌드 스크립트에 맞게 구조를 약간 조정해야 할 수도 있습니다.
패키지 대상을 사용하고 임시 디렉터리를 지정하여 이 작업을 수행할 수 있어야 합니다.
msbuild solution.sln /p:Configuration=Release;DeployOnBuild=true;DeployTarget=Package;_PackageTempDir=..\publish
또는 XDT 변환 도구를 사용해 보십시오.
https://github.com/greenfinch/ctt
저는 불분명한 msbuild 대상을 건드리는 대신 이것을 사용하고 있습니다.web.config뿐만 아니라 app.config에서도 작동합니다.
다음과 같은 변화로 저에게 효과가 있었습니다.
<MSBuild Projects="$(ProjectFile)"
Targets="ResolveReferences;_WPPCopyWebApplication"
Properties="WebProjectOutputDir=TempOutputFolder;OutDir=$(WebProjectOutputDir);Configuration=$(Configuration);" />
마이크로소프트에서.WebApplication.targets 파일(MsBuild 폴더)
_CopyWebApplication
This target will copy the build outputs along with the
content files into a _PublishedWebsites folder.
This Task is only necessary when $(OutDir) has been redirected
to a folder other than ~\bin such as is the case with Team Build.
The original _CopyWebApplication is now a Legacy, you can still use it by
setting $(UseWPP_CopyWebApplication) to true.
By default, it now change to use _WPPCopyWebApplication target in
Microsoft.Web.Publish.targets.
It allow to leverage the web.config trsnaformation.
MSBuild에 대한 전문가는 아니지만 다음 링크의 정보를 사용하여 동일한 작업을 수행할 수 있었습니다.
http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
기사 하단 근처에 MSBuild와 관련된 섹션이 있습니다.이게 도움이 되길 바랍니다.
이 문제를 다루기 전에 며칠 동안 검색한 후에 이 주제에 대한 또 다른 대답은 다음과 같습니다.
게시 프로필과 구성 이름이 일치해야 합니다.
제 경우는 그렇지 않았어요.게시 프로필을 통해 수동으로 게시하면 구성이 게시 프로필에 설정되어 있기 때문에 원하는 결과를 얻을 수 있습니다.그러나 MSBuild는 지능적이고 이름을 기반으로 게시 프로파일과 구성을 마법처럼 연결합니다. (명령에 /p:Configuration을 추가하면 참조된 프로젝트의 출력 경로에 대한 다른 이상한 오류가 발생했습니다.)
제가 의미하는 바를 정확히 말씀드리자면,
명령줄의 MSBuild 문
msbuild myproject.sysroj -t:Clean -t:Rebuild /p:DeployOnBuild=true /p:PublishProfile="개발"
작동하다
- 프로필 이름 게시:발전
- 솔루션 구성 이름:발전
작동하지 않음
- 프로필 이름 게시:발전
- 솔루션 구성 이름:데브
이것이 도움이 되길 바랍니다!
언급URL : https://stackoverflow.com/questions/2905151/msbuild-script-and-vs2010-publish-apply-web-config-transform
'prosource' 카테고리의 다른 글
데이터 프레임을 행별 및 열별로 랜덤화(또는 순열화)하는 방법 (0) | 2023.06.07 |
---|---|
Xcode 4.3에서 "응용 프로그램에 유효한 'aps-environment' 자격 문자열을 찾을 수 없음"을 수정하는 방법은 무엇입니까? (0) | 2023.06.07 |
스크립트 + 스크립트에서 변수의 유형을 확인하는 방법은 무엇입니까? (0) | 2023.06.07 |
Visual Format Language(시각적 형식 언어)를 사용하여 뷰의 중앙에 보기 (0) | 2023.06.07 |
요청 실패: 허용되지 않는 내용 유형: AFNetworking 2.0을 사용하는 text/html (0) | 2023.06.07 |