2012-10-30 4 views
9

내 프로젝트에서 여러 .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)을 올바르게 설정하려면 어떻게해야합니까?

+0

올렉 Sych에 csproj에서

<ItemGroup> <T4ReferencePath Include="$(TargetDir)" /> </ItemGroup> 

<#@ assembly name="MyDependency.dll" #> 

은 msbuild를 통합에 대해 쓴 : HTTP : //www.olegsych합니다.co.kr/2010/04/understanding-t4-msbuild-integration/# IncludeFolders. 나는 그것이 당신의 문제를 해결하는지는 알 수 없다. 그러나 그것은 주제에 관한 꽤 좋은 가이드 인 것처럼 보인다. – FuleSnabel

+0

그래, 거기 주사위 .. –

답변

4

Visual Studio에서 $ (OutputPath)를 정의한 부분이 보이지 않습니다. 당신의 프로젝트에서 당신의 아이템에 $ (TargetDir)을 시도 했습니까? 그런 다음 T4 파일의 Assembly 선언에서 $ (TargetDir) \을 제거 할 수 있습니다.

나는 일과 비슷한 것을 얻을 수있는 가능성을 열심히 일했으며, 현재 또는 내일 블로그 게시물을하고있을 것입니다.

그래서

: 당신의 T4 파일

+0

여기에 약속 된 블로그 게시물이야. 지체를 유감스럽게 생각합니다! http://netitude.bc3tech.net/2013/06/15/t4-gotchyas-in-your-environment/ – bc3tech

관련 문제