T4MVC "запустить настраиваемый инструмент" генерирует предупреждение EnvDTO 7.0 против 8.0 csc

Я получаю следующее предупреждение, когда я нажимаю правой кнопкой мыши на T4MVC.tt и выбираю "запускать настраиваемый инструмент" (т.е. перестраивает файл T4MVC.cs).

Предупреждение 1 Компиляция преобразования: Предполагая ссылку на сборку 'EnvDTE, Version = 7.0.3300.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' соответствует 'EnvDTE, Version = 8.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a', вам может потребоваться предоставить среду выполнения C:\Development\EHealth-Trunk\src\EHealth.Web\T4MVC.tt 1 1

Это неважно, мне просто не нравятся (ненужные) предупреждения в моей кодовой базе...

Ответ 1

Я не совсем понял, в чем проблема, но я выделил ее для небольшого воспроизведения, где это происходит:

<#@ template language="C#" #>
<#@ assembly name="EnvDTE" #>
<#@ assembly name="VSLangProj" #>

<#+ 
void Test(EnvDTE.Project Project) {
    var vsProject = (VSLangProj.VSProject)Project.Object;
    var refs = vsProject.References;
}
#>

Во время обработки появляется следующее предупреждение:

Compiling transformation: Assuming assembly reference 'EnvDTE, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' matches 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a', you may need to supply runtime policy

Единственный EnvDTE в моем GAC - 8.0.0.0. Похоже, что проблема связана с тем, что VSLangProj 7.0.3300.0 (единственное, что у меня есть) имеет ссылку на EnvDTE 7.0.3300.0, которая не существует.

Ясно, что это еще не "ответ", но это начало расследования:)

Ответ 2

Изменить:

< # @assembly name= "EnvDTE" # >

To:

< # @assembly name= "EnvDTE, Version = 8.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a" # >

в T4MVC.tt и он удалит предупреждение компилятора:)

Дэвид - я собираюсь отправить запрос на перенос с исправлением MvcContrib в ближайшее время - просто сообщите мне, что вы довольны этим решением, прежде чем я это сделаю:)

Ответ 3

Добавьте app.config и вставьте этот код ниже:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v2.0.50318">
        <dependentAssembly>
            <assemblyIdentity name="EnvDTE" publicKeyToken=
            "b03f5f7f11d50a3a"/>
            <bindingRedirect oldVersion="7.0.3300.0" 
            newVersion="8.0.0.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>