2011-07-26 17 views
11

Recibo la siguiente advertencia cuando hago clic derecho en T4MVC.tt y selecciono "ejecutar herramienta personalizada" (es decir, reconstruir por el archivo T4MVC.cs).T4MVC "ejecutar herramienta personalizada" genera EnvDTO 7.0 frente a advertencia de 8.0 csc

Advertencia 1 Compilación de transformación: Suponiendo referencia de ensamblado 'EnvDTE, versión = 7.0.3300.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' partidos 'EnvDTE, versión = 8.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a ', puede que tenga que suministrar la política de tiempo de ejecución C: \ Desarrollo \ EHealth-Trunk \ src \ EHealth.Web \ T4MVC.tt 1 1

que no es gran cosa en realidad, simplemente no me gusta tengo advertencias (innecesarias) en mi base de código ...

+0

Sí, esto ha sido una molestia por un tiempo, y nunca estuve seguro exactamente qué lo causó. Tal vez es hora de que investigue un poco más profundo! –

Respuesta

3

no lo he dado cuenta de cuál es el problema, pero yo aislarlo a una pequeña repro donde esto ocurre:

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

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

que obtiene la siguiente advertencia durante el procesamiento:

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 

El único EnvDTE en mi GAC es 8.0.0.0. Parece que el problema se relaciona con el hecho de que VSLangProj 7.0.3300.0 (el único que tengo) tiene una referencia a EnvDTE 7.0.3300.0, que no existe.

Claramente, esto no es una 'respuesta' del todo todavía, pero es el comienzo de la investigación :)

+0

La parte que creo que nos ayudará es "es posible que deba proporcionar una política de tiempo de ejecución", que está cubierta (muy brevemente) aquí: http://msdn.microsoft.com/en-us/library/wc57zasf%28v=VS. 90% 29.aspx: dicen algo sobre forzar la 'unificación mediante el uso de directivas en el archivo .config de la aplicación' ... –

+0

El hecho de que la plantilla se ejecute sin errores muestra que las políticas adecuadas están en su lugar. El problema es que el compilador no lo sabe. Otro enfoque podría ser utilizar un pragma para tratar de eliminar la advertencia, pero no puedo hacer que funcione. :( –

2

Cambio:

< # nombre de ensamblado @ = "EnvDTE" #>

Para:

< # nombre de ensamblado @ = "EnvDTE, versión = 8,0 .0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a" #>

en T4MVC.tt y se eliminará la advertencia del compilador :)

David - Me voy a presentar una solicitud de extracción con el arreglo a MvcContrib pronto - házmelo saber que está satisfecho con la solución antes de hacerlo :)

+0

Ignore esta respuesta por ahora ... No estoy seguro de que realmente funcione (lo siento). –

+0

Lo siento, me acabo de dar cuenta de esto.¡Avísame si obtienes algo que funcione! –

+0

No estoy seguro de si esto hace algo útil o no ... Parece que muestra la advertencia hasta que edite el archivo T4MVC.tt y presione guardar (lo que supongo dispara el compilador tt) y luego la advertencia desaparece ... –

1

Añadir app.config y pega este código de abajo:

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

Cuestiones relacionadas