【问题标题】:TeamCity includes dll as reference when building projectTeamCity 在构建项目时包含 dll 作为参考
【发布时间】:2015-10-21 08:54:58
【问题描述】:

我们有一个包含 win32 dll 作为 content 文件的项目。此文件 (native32.dll) 被复制到输出目录并在运行时导入。 Visual Studio 编译项目时没有任何问题,但 TeamCity 会使用此 .dll 文件(或项目结构中包含的任何 .dll 文件)并将其视为参考:

  csc.exe <..> /reference:native32.dll <..>

构建失败并出现错误:

CSC error CS0009: Metadata file 'native32.dll' could not be opened -- PE image doesn't contain managed metadata

如何排除这个native32.dll被引用?

【问题讨论】:

    标签: c# reference msbuild teamcity


    【解决方案1】:

    您需要创建一个Class Library 并将DLL 与包装器/互操作类一起包含在该库中。然后只需从您之前无法编译的其他项目中引用类库。

    【讨论】:

    • 嗯,这似乎是一个 TeamCity 限制黑客,这不是解决此类问题的最佳方法 - 更改项目以迎合构建服务器,我希望这可以直接完成方式使用配置,但如果没有其他方式,我想就是这样。标记为答案。
    • 我认为这是一个 MSBuild 限制,它在 Visual Studio 中工作的事实可能只是表明他们为你做了一堆他们真的不应该做的魔法。不过,我没有任何证据证明这一点。
    • 否 - TeamCity 专门在构建时向 csc.exe 命令行添加参数,VS 只是不向项目中未引用的库添加 /reference 参数。至少我假设 csc 命令行是由 TeamCity 而不是 MSBuild 生成的(无论如何它应该是这样的)。
    • 有趣。那么可能是 TeamCity 中的一个错误?
    • 由于我没有收到任何其他答案,如何仅使用 TeamCity(并在检查 TeamCity 中的所有可能选项后)我认为这确实是一个错误或缺少的功能(忽略包含的库从被引用)。在从 8 升级到 TeamCity 9 后,它也开始发生,但我必须检查我是否确实做的一切正确并且没有遗漏任何东西。
    猜你喜欢
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 2019-08-02
    • 1970-01-01
    • 2014-05-27
    相关资源
    最近更新 更多