Проблемы генерации T4 из командной строки с помощью TextTransform.exe - PullRequest
1 голос
/ 28 января 2020

Я запускаю команду со следующими параметрами:

"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\TextTransform.exe" -I "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes" -a !!NamespaceHint!MyNamespace -dp T4VSHost!Microsoft.Data.Entity.Design.VisualStudio.Directives.FallbackT4VSHostProcessor!"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\Microsoft.Data.Entity.Design.dll"
-P "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\PublicAssemblies" "MyTemplate.tt"

И эта ошибка, которую я получаю:

error : An exception was thrown while trying to compile the transformation code. The following Exception was thrown:
System.IO.FileNotFoundException: Could not load file 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\PublicAssemblies\EnvDTE'.
Nombre de archivo: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\PublicAssemblies\EnvDTE'
   at  System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at  System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at  System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   at  Roslyn.Utilities.FileUtilities.OpenFileStream(String path)
   at  Microsoft.CodeAnalysis.MetadataReference.CreateFromFile(String path, MetadataReferenceProperties properties, DocumentationProvider documentation)
   at  Microsoft.VisualStudio.TextTemplating.CompilerBridge.<>c.<.ctor>b__15_0(String x)
   at  System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
   at  System.Linq.Enumerable.<UnionIterator>d__67`1.MoveNext()
   at  System.Linq.Enumerable.<UnionIterator>d__67`1.MoveNext()
   at  System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at  System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at  System.Collections.Immutable.ImmutableArray.CreateRange[T](IEnumerable`1 items)
   at  Microsoft.CodeAnalysis.ImmutableArrayExtensions.AsImmutableOrEmpty[T](IEnumerable`1 items)
   at  Microsoft.CodeAnalysis.Compilation.ValidateReferences[T](IEnumerable`1 references)
   at  Microsoft.CodeAnalysis.CSharp.CSharpCompilation.WithReferences(IEnumerable`1 references)
   at  Microsoft.CodeAnalysis.CSharp.CSharpCompilation.CommonWithReferences(IEnumerable`1 newReferences)

Однако внутри C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Community \ Common7 \ IDE \ PublicAssemblies У меня есть следующее содержимое:

enter image description here

Заголовок .tt-файла имеет следующий код:

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ assembly name="EnvDTE" #>
<#@ assembly name="EnvDTE80" #>
<#@ assembly name="Microsoft.VisualStudio.Shell.15.0" #>
<#@ assembly name="Microsoft.VisualStudio.Shell.Interop" #>
<#@ import namespace="EnvDTE" #>
<#@ import namespace="EnvDTE80" #>
<#@ import namespace="Microsoft.VisualStudio.Shell" #>
<#@ import namespace="Microsoft.VisualStudio.Shell.Interop" #>
<#@ import namespace="System.Diagnostics" #>
<#@ include file="EF.Utility.CS.ttinclude"#>
<#@ output extension=".cs"#>

Как решить проблему?

Кстати, я использую Visual Studio 2019 Enterprise.

...