2011-07-26 7 views
11

Otrzymuję następujące ostrzeżenie po kliknięciu prawym przyciskiem myszy na T4MVC.tt i wybraniu polecenia "uruchom narzędzie niestandardowe" (tzn. Przebuduj za pomocą pliku T4MVC.cs).T4MVC "uruchom narzędzie niestandardowe" generuje ostrzeżenie EnvDTO 7.0 w porównaniu do 8.0 csc

ostrzegawczy 1 Kompilacja Transformacja Zakładając odniesienia montażowych EnvDTE, wersja = 7.0.3300.0 Kultura = neutralne TokenKluczaPublicznego = b03f5f7f11d50a3a 'EnvDTE pasuje”, wersja 8.0.0.0 = Kultura = neutralne TokenKluczaPublicznego = b03f5f7f11d50a3a ” może trzeba dostarczyć polityka Runtime C: \ Development \ eZdrowia-Trunk \ src \ EHealth.Web \ T4MVC.tt 1 1

To naprawdę nic wielkiego, po prostu nie lubią mam (niepotrzebne) ostrzeżenia w mojej bazie kodu ...

+0

Tak, przez pewien czas było to irytujące i nigdy nie byłem pewien, co dokładnie spowodowało. Może nadszedł czas, aby zbadać to nieco głębiej! –

Odpowiedz

3

Nie dość zorientowali się, w czym jest problem, ale nie izolować go do małego Repro gdzie to się dzieje:

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

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

które pobiera następujące ostrzeżenie podczas przetwarzania:

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 

Jedynym EnvDTE w moim GAC to 8.0.0.0. Wydaje się, że problem dotyczy faktu, że VSLangProj 7.0.3300.0 (jedyny, który mam) ma odniesienie do EnvDTE 7.0.3300.0, które nie istnieje.

Oczywiście, nie jest to 'odpowiedź' dość jeszcze, ale to początek dochodzenia :)

+0

Część, która moim zdaniem pomoże nam, to "może być konieczne dostarczenie zasad dotyczących środowiska wykonawczego", które są omówione (zbyt krótko) tutaj: http://msdn.microsoft.com/en-us/library/wc57zasf%28v=VS. 90% 29.aspx - mówią coś o wymuszaniu "ujednolicania za pomocą dyrektyw w pliku .config aplikacji" ... –

+0

Fakt, że szablon działa bezbłędnie, pokazuje, że odpowiednie zasady są na miejscu. Problem polega na tym, że kompilator tego nie wie. Innym podejściem może być użycie pragmy, aby usunąć ostrzeżenie, ale nie będę w stanie wykonać tej pracy. :( –

2

Zmiana:

< # nazwa @ montaż = "EnvDTE" #>

Do:

< # nazwa @ montaż = "EnvDTE, Version = 8,0 .0.0, Culture = neutral, TokenKluczaPublicznego = b03f5f7f11d50a3a”#>

w T4MVC.tt i usunie ostrzeżenie kompilatora :)

David - Zamierzam złożyć wniosek ściągania z poprawką do MvcContrib wkrótce - po prostu daj mi znać, że jesteś zadowolony z tego rozwiązania, zanim to zrobić :)

+0

Zignoruj ​​tę odpowiedź na razie ... Nie jestem pewien, czy to działa (przepraszam) –

+0

Przepraszam, właśnie to zauważyłem.Daj mi znać, jeśli coś Ci pomoże! –

+0

Nie jestem pewien, czy robi to coś użytecznego, czy nie ... Wydaje się, że wyświetla ostrzeżenie, dopóki nie edytujesz pliku T4MVC.tt i nie klikniesz save (co, jak przypuszczam, wyzwoli kompilator tt), wtedy ostrzeżenie zniknie ... –

1

Dodaj app.config i wklej ten kod poniżej:

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

Powiązane problemy