내 프로젝트에서 여러 .tt 파일을 처리하는 T4 템플릿이 있습니다. 또한 코드 변환 프로세스를 돕기 위해 정의한 사용자 정의 클래스가 있습니다.빌드 중 T4 코드 생성, 사용자 지정 어셈블리 참조
<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="$(TargetDir)\MyDependency.dll" #>
Visual Studio에서 작동하는데, $ (TargetDir)을 올바르게 정의하는 VS 매크로가 있습니다.
이제 빌드 프로세스 중에 코드 생성 프로세스를 수행하려고합니다.
<TransformOnBuild>true</TransformOnBuild>
<OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
<IncludeDslT4Settings>true</IncludeDslT4Settings> <ItemGroup>
<T4ReferencePath Include="$(OutputPath)" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" />
내 빌드가 실행,하지만 난 얻을 : 내가 추가
C : \ 프로그램 파일 (86) \ MSBuild를 \ 마이크로 소프트 \으로 VisualStudio \ TextTemplating \ V10.0 \ Microsoft.TextTemplating. targets (407) : 어셈블리 참조 '$ (TargetDir) \ MyDependency.dll'을 해결하는 동안 호스트에서 예외가 발생했습니다. 변환 은 실행되지 않습니다. 다음 예외가 throw되었습니다. System.IO.FileLoadException : 주어진 어셈블리 이름 또는 코드베이스가 입니다. Microsoft.VisualStudio.TextTemplating.GlobalAssemblyCacheHelper.GetLocation에서 System.Reflection.AssemblyName.nInit()에서 System.Reflection.AssemblyName.nInit (RuntimeAssembly & 조립체 부울 forIntrospection 부울 raiseResolveEvent)에 (0x80131047 HRESULT에서 예외) Microsoft.VisualStudio.TextTemplating.Engine.ResolveAssemblyReferences에서 Microsoft.VisualStudio.TextTemplating.Sdk.Host.GenericTextTemplatingHost.ResolveAssemblyReference에서 (문자열 는 StrongName) (문자열 assemblyReference) (ITextTemplatingEngineHost 호스트, TemplateProcessingSession 세션). Line = -1, Column = -1
분명히 팀 빌드 컨텍스트에서 $(TargetDir)
이 해결되지 않습니다.
빌드 구성의 속성 그룹에 TargetDir을 추가하려고했지만 아무 소용이 없었습니다. 이 값은 T4 코드 생성기의 컨텍스트로 전달되지 않습니다.
환경 변수를 사용하고 싶지 않습니다.
Team Build 컨텍스트에서 $(TargetDir)
을 올바르게 설정하려면 어떻게해야합니까?
올렉 Sych에 csproj에서
및
은 msbuild를 통합에 대해 쓴 : HTTP : //www.olegsych합니다.co.kr/2010/04/understanding-t4-msbuild-integration/# IncludeFolders. 나는 그것이 당신의 문제를 해결하는지는 알 수 없다. 그러나 그것은 주제에 관한 꽤 좋은 가이드 인 것처럼 보인다. – FuleSnabel그래, 거기 주사위 .. –