2014-06-09 58 views
3

在這一天裏,我已經在牆上撞了我的頭幾天。沒有任何數量的谷歌搜索或混亂似乎得出答案。你如何得到T4ReferencePath的工作?

我想在構建時運行T4模板。其中,我需要訪問我在此項目之前構建的程序集中的類型。我需要msbuild來構建它,而且msbuild對VS變量的處理效果不好,所以我需要使用其他方法來加載程序集。

我讀過很多T4ReferencePath是設置加載自定義程序集的地方的答案。但是,我無法讓它工作。

當我說明這一點:

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

我得到這個時候我要麼嘗試加載該項目在VS或MSBuild的運行:

d:\Users\250894\Documents\Visual Studio 2013\Projects\TestT4\TestT4.csproj(90,22): error MSB4066: The attribute "Include" in element <T4ReferencePath> is unrecognized. 

我確實有「Visual Studio的可視化和建模SDK「安裝。

對於缺乏簡潔性我表示歉意,但是我包含了我的測試項目的整個.csproj文件,以防萬一某些明顯的錯誤發生。我不包括我的.tt文件,因爲如果我甚至無法加載我的csproj,它就不相關。如果我排除T4ReferencePath,那麼事情工作正常。

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 
    <PropertyGroup> 
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 
    <ProjectGuid>{5B9944E7-47CF-4BFE-BAEF-F02D29D59E80}</ProjectGuid> 
    <OutputType>Exe</OutputType> 
    <AppDesignerFolder>Properties</AppDesignerFolder> 
    <RootNamespace>TestT4</RootNamespace> 
    <AssemblyName>TestT4</AssemblyName> 
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> 
    <FileAlignment>512</FileAlignment> 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <PlatformTarget>AnyCPU</PlatformTarget> 
    <DebugSymbols>true</DebugSymbols> 
    <DebugType>full</DebugType> 
    <Optimize>false</Optimize> 
    <OutputPath>bin\Debug\</OutputPath> 
    <DefineConstants>DEBUG;TRACE</DefineConstants> 
    <ErrorReport>prompt</ErrorReport> 
    <WarningLevel>4</WarningLevel> 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <PlatformTarget>AnyCPU</PlatformTarget> 
    <DebugType>pdbonly</DebugType> 
    <Optimize>true</Optimize> 
    <OutputPath>bin\Release\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <ErrorReport>prompt</ErrorReport> 
    <WarningLevel>4</WarningLevel> 
    </PropertyGroup> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'"> 
    <DebugSymbols>true</DebugSymbols> 
    <OutputPath>bin\x64\Debug\</OutputPath> 
    <DefineConstants>DEBUG;TRACE</DefineConstants> 
    <DebugType>full</DebugType> 
    <PlatformTarget>x64</PlatformTarget> 
    <ErrorReport>prompt</ErrorReport> 
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> 
    <Prefer32Bit>true</Prefer32Bit> 
    </PropertyGroup> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'"> 
    <OutputPath>bin\x64\Release\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <Optimize>true</Optimize> 
    <DebugType>pdbonly</DebugType> 
    <PlatformTarget>x64</PlatformTarget> 
    <ErrorReport>prompt</ErrorReport> 
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> 
    <Prefer32Bit>true</Prefer32Bit> 
    </PropertyGroup> 
    <ItemGroup> 
    <Reference Include="System" /> 
    <Reference Include="System.Core" /> 
    <Reference Include="System.Xml.Linq" /> 
    <Reference Include="System.Data.DataSetExtensions" /> 
    <Reference Include="Microsoft.CSharp" /> 
    <Reference Include="System.Data" /> 
    <Reference Include="System.Xml" /> 
    </ItemGroup> 
    <ItemGroup> 
    <Compile Include="Program.cs" /> 
    <Compile Include="Properties\AssemblyInfo.cs" /> 
    <Compile Include="Test.cs"> 
     <AutoGen>True</AutoGen> 
     <DesignTime>True</DesignTime> 
     <DependentUpon>Test.tt</DependentUpon> 
    </Compile> 
    </ItemGroup> 
    <ItemGroup> 
    <None Include="App.config" /> 
    <None Include="Test.tt"> 
     <Generator>TextTemplatingFileGenerator</Generator> 
     <LastGenOutput>Test.cs</LastGenOutput> 
    </None> 
    </ItemGroup> 
    <ItemGroup> 
    <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" /> 
    </ItemGroup> 
    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
    <PropertyGroup> 
    <!-- Get the Visual Studio version – defaults to 12: --> 
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">12.0</VisualStudioVersion> 
    <!-- Keep the next element all on one line: --> 
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> 
    <TransformOnBuild>true</TransformOnBuild> 
    <IncludeDslT4Settings>true</IncludeDslT4Settings> 
    <T4ReferencePath Include="$(TargetDir)" /> 
    </PropertyGroup> 
    <Import Project="$(VSToolsPath)\TextTemplating\Microsoft.TextTemplating.targets" /> 
</Project> 
+0

在我終於發佈問題之前,無論我多長時間努力尋找答案,我總是會找到答案或自己想出答案。 我不知道或理解爲什麼,但T4ReferencePath不是屬性。它是一個項目,因此它屬於一個ItemGroup。這對我來說沒有任何意義,但是現在至少需要加載項目文件。 – Jamie

回答

2

我終於偶然發現了答案。我無法想象之前沒有人遇到過這種情況,但我們在這裏。希望我已經開闢了一條能夠幫助那些後來者。

儘管常識告訴我,但T4ReferencePath不是「屬性」。這是一個「項目」。當我從「PropertyGroup」中刪除它並將其添加到「ItemGroup」時,它很高興。

一般而言,軟件開發和計算機使用的一個缺陷是無用的錯誤消息。我不能說這是我遇到過的最令人震驚的例子,但它在那裏。

相關問題