2014-05-09 2 views
5

Visual Studio 및 MSBUild에서 비교적 간단한 C# 코드를 생성하는 데 사용할 수있는 T4 템플릿을 만드는 데 문제가 있습니다. 템플릿은 프로젝트의 출력 경로에있는 DLL을 참조합니다. 그 외에도 도메인 객체 컬렉션을 반복하고 각 객체에 대한 테스트 메소드를 출력하는 매우 간단한 템플릿입니다.T4 : Visual Studio 및 MSBuild에서 속성 사용

MSDN suggests 두 호스트의 속성을 사용하는 다음과 같은 방법 :

<!-- Define a project property, myLibFolder: --> 
<PropertyGroup> 
    <myLibFolder>$(MSBuildProjectDirectory)\..\libs</myLibFolder> 
</PropertyGroup> 

<!-- Tell the MSBuild T4 task to make the property available: --> 
<ItemGroup> 
    <T4ParameterValues Include="myLibFolder"> 
     <Value>$(myLibFolder)</Value> 
    </T4ParameterValues> 
    </ItemGroup> 

불행하게도,이 그냥 작동하지 않습니다.

Compiling transformation: Metadata file '$(myLibFolder)Cmc.SpeedWays.Core.Testing.dll' could not be found 

아무도이 문제를 해결하기 위해 관리하거나 적어도 수용 가능한 해결 방법을 찾았나요 : MSBuild를 통해 실행하면, 다음과 같은 오류가? 우리는 VS2012와 MSBUild 4.0을 사용하고 있습니다.

답변

1

나는 똑같은 문제가 있었고, 한 가지 확실한 수정을 얻지 못해서 유감스럽게 생각합니다. 그러나 문제는 사라졌으며 가능한 문제의 모음처럼 보입니다.

저는이 속성 선언의 유형이 MSBuild를 사용하여 솔루션/프로젝트를 빌드하는 경우에만 작동한다고 생각합니다. Visual Studio를 사용하면 속성이 null이됩니다. 나는 이것이 나를위한 혼란이라고 생각한다. 결국 나는 내가 MSBUILD이 속성을 선언 얻으려고 내 템플릿에 전화로 결국, 이것은 문자열 연결에 유효하지 않은 문자열을 구축하고 조심 VS로

var configName = Host.ResolveParameterValue("-", "-", "configuration"); 
if (String.IsNullOrEmpty(configName)==true) 
{ 
    WriteLine ("// Generated from Visual Studio"); 
    IServiceProvider serviceProvider = (IServiceProvider)this.Host; 
    DTE dte = serviceProvider.GetService(typeof(DTE)) as DTE; 
    configName = dte.Solution.SolutionBuild.ActiveConfiguration.Name ; 
} 

다른 일을 실패하면, 쉽게 null로 끝나기

관련 문제