首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >T4程序集指令找不到指定的文件

T4程序集指令找不到指定的文件
EN

Stack Overflow用户
提问于 2015-01-22 04:00:42
回答 1查看 1.8K关注 0票数 5

无论使用什么方法在程序集指令中指定文件,T4引擎都找不到指定的文件。

代码语言:javascript
运行
复制
<#@ assembly name="$(SolutionDir)packages\TestPackage\lib\net45\Test.dll"#>

或<#@程序集name="C:\Test.dll"#>

或任何其他方法都会导致相同的未发现问题。模板引擎似乎能够读取文件并显示其版本信息,即使找不到它。

代码语言:javascript
运行
复制
Errors were generated when initializing the transformation object. The transformation will not be run. The following Exception was thrown:
System.IO.FileNotFoundException: Could not load file or assembly ‘Test, Version=1.0.1.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. The system cannot find the file specified.

表示缺少依赖关系。程序集没有依赖项。

为什么T4引擎找不到我的程序集?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-22 04:00:42

打包程序集时,有对EnvDTE或其他COM互操作类型的外部引用。当在EnvDTE模板中访问T4 (或其他COM)互操作时,它尝试解析EnvDTE的引用,并将解析到试图加载的程序集。这是文件找不到异常的地方,一个循环引用。它是由在程序集中嵌入互操作类型引用引起的(出于性能原因,默认情况下为on)。

戴夫塞克斯顿5年前发现了这个问题。

更具体地说,是类型(DTE)导致Visual试图加载我的程序集。我的程序集是一个.NET 4.0程序集,默认情况下,对自动化程序集envdte的引用是在启用NoPIA功能的情况下添加的。这将导致编译器将envdte的互操作类型嵌入到我的程序集中。因此,类型( DTE )解析为程序集中的DTE类型,这导致Visual要求加载我的程序集来解析DTE类型!

为了解决这个问题,必须禁用引用的COM程序集互操作类型的嵌入。

  1. 打开“我的项目的引用”文件夹(Visual 2010,.NET 4.0)。
  2. 对自动化程序集的每次引用;例如,envdte、envdte80、vslangproj、vslangproj2、vslangproj80等。
  3. 选择引用并打开“属性”窗口。
  4. 将类型值更改为False。

重新生成原始程序集并尝试加载它。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28081086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档