2015-12-09 38 views
4

我剛剛通過NuGet將TypeLite安裝到我的項目中,但它不起作用,並且我嘗試過的所有內容都沒有幫助...這是安裝後創建的文件:TypeLite全新安裝不起作用

<#@ 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); #> 

這是錯誤我得到:

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 

如果讓我選擇 「調試T4模板」 這是我所得到的:

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 

如果我添加到這個文件:

<#@集名稱= 「System.Web.Http.dll」 #>

然後我得到:

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 

不幸的是我沒有能夠找出5.2.2參考的位置;我的項目中的一切都是5.2.3。如果我將文件路徑放到我的5.2.3 DLL中,並將其放入(它是來自nuget的c:\ packages ...),它就可以工作。

我想我的問題是爲什麼不找到通過項目的DLL引用,還是有更好的方法來做到這一點?我不想在這個文件中硬編碼路徑,理想情況下我根本不需要指定它們,但是我不知道在這一點上該如何做。

+0

我們遇到類似的問題,這是不可解決的。 我們最終創建了一個小型控制檯應用程序,並從那裏的T4模板複製了代碼。 – sniels

回答

0

T4模板並不知道您的項目中安裝的軟件包的任何內容,因此需要手動添加對使用的組件的引用。

顯然T4正試圖加載錯誤版本的庫。我會檢查你的bin文件夾是否包含程序集的正確版本,我會嘗試從那裏引用庫。

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

得到了同樣的錯誤。在我的情況下,我想通過typeLite處理的所有文件都在同一個程序集中,因此我通過使用以下(在.tt文件中)限制爲一個程序集來解決問題:

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