2015-12-09 4 views
4

Je viens d'installer TypeLite dans mon projet via NuGet, mais ça ne marche pas, et tout ce que j'ai essayé n'a pas aidé ... C'est le fichier qui a été créé après l'installation:L'installation de TypeLite ne fonctionne pas

<#@ template debug="false" hostspecific="True" language="C#" #> 
<#@ assembly name="$(TargetDir)TypeLite.dll" #> 
<#@ assembly name="$(TargetDir)TypeLite.Net4.dll" #> 
<#@ assembly name="$(TargetDir)$(TargetFileName)" #> 

<#@ import namespace="TypeLite" #> 
<#@ import namespace="TypeLite.Net4" #> 
<#@output extension=".d.ts"#> 

<#@include file="Manager.ttinclude"#> 
<# var manager = Manager.Create(Host, GenerationEnvironment); #> 

<# var ts = TypeScript.Definitions() 
     .WithReference("Enums.ts") 
     .ForLoadedAssemblies(); 
#> 

<#= ts.Generate(TsGeneratorOutput.Properties) #> 

<# manager.StartNewFile("Enums.ts"); #> 
<#= ts.Generate(TsGeneratorOutput.Enums) #> 
<# manager.EndBlock(); #> 
<# manager.Process(true); #> 

Ceci est l'erreur que je reçois:

Severity Code Description Project File Line 
Error  Running transformation: System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. 
    at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) 
    at System.Reflection.RuntimeModule.GetTypes() 
    at System.Reflection.Assembly.GetTypes() 
    at TypeLite.TsModelBuilder.Add(Assembly assembly) 
    at TypeLite.Net4.TypeScriptFluentExtensions.ForLoadedAssemblies(TypeScriptFluent ts) 
    at Microsoft.VisualStudio.TextTemplating097C215A707CB07DE5AACDA590F263DF8554A0CCA899B583BF1832F7C0C5D3E595312AE41D3DFD1BB9CA643458AA5D86FE3DBA281ED0000D4B4C1D87EA1DEFFB.GeneratedTextTransformation.TransformText() MyApp S:\MyApp\Scripts\TypeLite.Net4.tt 1 

Si je choisis "modèle T4 Debug" ce que je reçois:

Severity Code Description Project File Line 
Error  Running transformation: System.IO.FileNotFoundException: Could not load file or assembly 'System.Web.Http, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified. 
File name: 'System.Web.Http, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 
    at System.ModuleHandle.ResolveType(RuntimeModule module, Int32 typeToken, IntPtr* typeInstArgs, Int32 typeInstCount, IntPtr* methodInstArgs, Int32 methodInstCount, ObjectHandleOnStack type) 
    at System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule module, Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext) 
    at System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments) 
     at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, MetadataImport scope, Assembly& lastAptcaOkAssembly, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, Boolean mustBeInheritable, Object[] attributes, IList derivedAttributes, RuntimeType& attributeType, IRuntimeMethodInfo& ctor, Boolean& ctorHasParameters, Boolean& isVarArg) 
    at System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule decoratedModule, Int32 decoratedMetadataToken, Int32 pcaCount, RuntimeType attributeFilterType, Boolean mustBeInheritable, IList derivedAttributes, Boolean isDecoratedTargetSecurityTransparent) 
    at System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeType type, RuntimeType caType, Boolean inherit) 
    at System.RuntimeType.GetCustomAttributes(Type attributeType, Boolean inherit) 
    at TypeLite.Extensions.TypeExtensions.GetCustomAttribute[TType](Type type, Boolean inherit) 
    at TypeLite.TsModelBuilder.<Add>b__4(Type t) 
    at System.Linq.Enumerable.WhereArrayIterator`1.MoveNext() 
    at TypeLite.TsModelBuilder.Add(Assembly assembly) 
    at TypeLite.Net4.TypeScriptFluentExtensions.ForLoadedAssemblies(TypeScriptFluent ts) 
    at Microsoft.VisualStudio.TextTemplating097C215A707CB07DE5AACDA590F263DF8554A0CCA899B583BF1832F7C0C5D3E595312AE41D3DFD1BB9CA643458AA5D86FE3DBA281ED0000D4B4C1D87EA1DEFFB.GeneratedTextTransformation.TransformText() in s:\MyApp\Scripts\TypeLite.Net4.tt:line 13 

=== Pre-bind state information === 
LOG: DisplayName = System.Web.Http, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
(Fully-specified) 
LOG: Appbase = file:///C:/Program Files (x86)/Microsoft Visual Studio 14.0/Common7/IDE/ 
LOG: Initial PrivatePath = NULL 
Calling assembly : Breeze.WebApi2, Version=1.5.0.0, Culture=neutral, PublicKeyToken=f6085f1a45e2ac59. 
=== 
LOG: This bind starts in LoadFrom load context. 
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load(). 
LOG: No application configuration file found. 
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. 
LOG: Post-policy reference: System.Web.Http, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 14.0/Common7/IDE/System.Web.Http.DLL. 
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 14.0/Common7/IDE/System.Web.Http/System.Web.Http.DLL. 
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 14.0/Common7/IDE/System.Web.Http.EXE. 
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio 14.0/Common7/IDE/System.Web.Http/System.Web.Http.EXE. 
LOG: Attempting download of new URL file:///S:/MyApp/bin/System.Web.Http.DLL. 
WRN: Comparing the assembly name resulted in the mismatch: Build Number 
LOG: Attempting download of new URL file:///S:/MyApp/bin/System.Web.Http/System.Web.Http.DLL. 
LOG: Attempting download of new URL file:///S:/MyApp/bin/System.Web.Http.EXE. 
LOG: Attempting download of new URL file:///S:/MyApp/bin/System.Web.Http/System.Web.Http.EXE. MyApp s:\MyApp\Scripts\TypeLite.Net4.tt 13 

Si j'ajoute ceci au fichier:

< # @ nom de l'assembly = "System.Web.Http.dll" #>

Puis-je obtenir:

Error  Compiling transformation: Assembly 'WebUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Http, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' MyApp S:\MyASpp\Scripts\TypeLite.Net4.tt 1 

Malheureusement je n'ai pas été en mesure de comprendre où cette référence 5.2.2 est; tout dans mes projets est 5.2.3. Si je prends le chemin du fichier vers ma DLL 5.2.3 et le place dans (qui est c: \ packages ... de nuget), cela fonctionne.

Je suppose que ma question est pourquoi ne trouve-t-il pas la référence DLL via le projet, ou y at-il une meilleure façon de le faire? Je ne veux pas avoir à coder en dur les chemins dans ce fichier, idéalement je n'aurais pas besoin de les spécifier du tout, mais je ne sais pas comment faire autrement à ce stade.

+0

Nous avons rencontré un problème similaire et il n'était pas soluble. Nous avons fini par créer une petite application console et copié le code à partir du template T4. – sniels

Répondre

0

Les modèles T4 ne connaissent rien aux packages installés dans votre projet, il est donc nécessaire d'ajouter manuellement une référence aux assemblys utilisés.

Évidemment T4 essaie de charger une mauvaise version de la bibliothèque. Je vérifierais si votre dossier bin contient la version correcte de l'assemblage et j'essaierais de référencer la bibliothèque à partir de là.

<#@ assembly name="$(TargetDir)System.Web.Http.dll" #> 
1

Vous avez la même erreur. Dans mon cas, tous les fichiers que je voulais être manipulés par typeLite étaient dans le même ensemble, donc je soved le problème en limitant l'un ensemble en utilisant les éléments suivants (dans le fichier .tt):

<# var ts = TypeScript.Definitions() 
    .For(Assembly.GetAssembly(typeof(MyWebProject.SomeClass))); 
#>