2014-06-09 4 views
3

Je me suis battu la tête contre le mur pendant quelques jours sur celui-ci. Aucune quantité de googling ou de déconner ne semble donner la réponse.Comment faire fonctionner T4ReferencePath?

Je souhaite exécuter un modèle T4 lors de la génération. Dans celui-ci, j'ai besoin d'accéder aux types dans un assemblage que j'ai construit avant ce projet. J'ai besoin de msbuild pour pouvoir le construire, et msbuild ne joue pas bien avec les variables VS, donc j'ai besoin d'utiliser un autre moyen pour charger l'assemblage.

J'ai lu dans beaucoup d'endroits que T4ReferencePath est la réponse à la mise en place d'un endroit pour charger un assemblage personnalisé. Cependant, je ne peux pas le faire fonctionner.

Quand je précise ceci:

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

je reçois quand je soit essayer de charger le projet dans VS ou l'exécuter avec msbuild:

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

J'ai la « Visualisation Visual Studio et Modeling SDK "installé. Je m'excuse pour le manque de brièveté, mais j'inclus le fichier entier .csproj de mon projet de test au cas où quelque chose est clairement évident que j'ai manqué. Je n'inclus pas mon fichier .tt car ce n'est pas pertinent si je n'arrive même pas à charger mon csproj. Si j'exclus le T4ReferencePath, les choses fonctionnent correctement.

<?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

Il semble que peu importe combien de temps je cherche une réponse avant de poster la question, je trouve toujours la réponse ou je la trouve moi-même. Je ne sais pas ou je ne comprends pas pourquoi, mais T4ReferencePath n'est pas une propriété. C'est un objet, donc il appartient à un ItemGroup. Cela n'a aucun sens pour moi, mais le fichier de projet se charge au moins maintenant. – Jamie

Répondre

2

Je suis finalement tombé sur la réponse. Je ne peux pas imaginer que personne ne l'ait déjà rencontré auparavant, mais nous y sommes. J'espère que j'ai tracé une piste qui aidera ceux qui viendront après.

Malgré ce que le sens commun me dit, T4ReferencePath n'est pas une "propriété". C'est un "Item". Quand je l'ai enlevé du "PropertyGroup" et l'ai ajouté à un "ItemGroup", il est devenu heureux.

L'un des fléaux du développement de logiciels et de l'utilisation de l'ordinateur en général est des messages d'erreur inutiles. Je ne peux pas dire que c'est l'exemple le plus flagrant que j'ai jamais rencontré, mais c'est là-haut.