【问题标题】:The type 'xxx' is defined in an assembly that is not referenced类型“xxx”在未引用的程序集中定义
【发布时间】:2013-06-22 02:54:43
【问题描述】:

我一直在互联网上寻找答案,并且真的可以使用帮助。

我已经查看了有关此错误的其他帖子,但这些答案都没有帮助我。

完整的错误是,

类型“xxx”是在未引用的程序集中定义的。您必须添加对程序集 'xxx, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' 的引用。

解决方案在本地构建良好,但是当我在构建服务器上触发构建时出现错误。

这是我迄今为止为解决此问题所做的工作:

  • 确保所有项目引用都是正确的(让架构师对其进行审核 和我一起)
  • 将“SpecificVersion”属性更改为 true
  • 删除引用并添加回来(在 VS2012 中并编辑 .csproj 文件本身)
  • 在构建服务器上本地构建解决方案,通过
  • 编辑 - 我还应该提到我已经在两个不同的构建服务器上构建了这个解决方案,但仍然得到同样的错误

我正在使用 VS2012 和 TFS2012 来执行此操作。

非常感谢任何帮助,谢谢。

*更新:*我刚刚在构建服务器上进行了 MSBuild,但将配置更改为“发布”并且能够重现部分错误。不过,一些关键的区别是它正在寻找的版本突然是 1.3.1.15 而不是 0.0.0.0 并且 PublicKeyToken 不再为空。有谁知道这可能意味着什么?程序集的版本应该是 0.0.0.0。

【问题讨论】:

  • 您是否检查过平台是否兼容? (即确保 .NET 4.0 程序集未引用 .NET 4.5 程序集,或 .NET 4 客户端配置文件程序集未引用 .NET 4 完整程序集)
  • 是的,一切都在 .NET 4.0 下运行

标签: c# reference assemblies tfsbuild


【解决方案1】:

因此,在与我的架构师一起工作了几个小时后,我们发现了问题所在。我们的开发人员将同一个 dll 的多个副本埋在我们的源代码控制的各个文件夹中。其中一个项目引用了不正确的 .dll。

修复引用并删除多余的 .dll 后,错误消失了,我们的构建终于开始工作了! :)

【讨论】:

  • 为此使用 Nuget - 会让您的生活更简单。
  • @BenCollins 怎么样?你有什么建议?
  • 将所需的程序集打包成一个 nuget 包,然后引用它,而不是放在磁盘上的程序集。需要直接组装的情况应该是非常罕见的(不是从来没有,而是很少见)。
【解决方案2】:

您提到您尝试在测试服务器上构建解决方案。您是使用 Visual Studio 2012 构建解决方案还是实际运行了 msbuild?

准确的测试是使用类似这样的 msbuild:

MSBuild MySolution.sln /p:Configuration="Debug" /p:Platform="CPU Any"

您实际上可以通过查看 TFS Build 的构建日志来获得确切的命令,它会列出它执行的构建命令并简单地自己运行它(您需要删除 TFS Build 添加的额外内容以进行日志记录)

之后,您可以在本地机器上运行相同的命令,看看是否通过。

要尝试的另一件事是为项目中的所有程序集设置“本地复制”。

希望这会有所帮助!

【讨论】:

  • 我在测试服务器上使用了 MSBuild,我刚刚检查了“复制本地”设置,它们已经为项目设置为 true。 :(
  • 所以它确实在构建服务器上使用 msbuild 构建?您还使用标准 xaml 进行 tfs 构建还是自定义/修改过的?现在关于构建配置:构建过程参数中“清洁工作区”的设置是什么?构建失败时,您是否在“构建代理文件夹”中看到所有源代码,并且是您在运行 MSBuild 时编译的解决方案吗?
  • 是的,它在构建服务器上使用 msbuild 构建。我正在使用标准的 xaml 流程模板,并且我的“清洁工作区”设置为“输出”。但我也将其设置为“全部”并且没有运气运行构建。我检查了服务器上的构建文件夹,运行 msbuild 时它确实包含所有源代码。
猜你喜欢
  • 2023-02-17
  • 1970-01-01
  • 2011-08-16
  • 2014-08-15
  • 2016-05-01
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多