【问题标题】:Configure TeamCity to follow OutputPath directives in csproj files配置 TeamCity 以遵循 csproj 文件中的 OutputPath 指令
【发布时间】:2010-07-21 12:39:00
【问题描述】:

我正在设置 TeamCity 以构建一些解决方案,其项目具有将构建重定向到 ../../bin/Release 或 ../../bin/Debug 的 OutputPath 指令。解决方案显然在 Visual Studio 2008 中构建良好,但是当 TeamCity 构建解决方案时,它无法找到引用项目的程序集并且我们得到命名空间错误(命名空间“AssemblyBeingBuilt”中不存在类型或命名空间名称“SomeReferencedAssembly”)。

有没有办法告诉 TeamCity 在哪里寻找其程序集不在默认位置的引用项目?它确实理解该指令,因为当它构建引用的项目时,输出被正确定向。只是它之后构建的其他项目没有找到它们所依赖的程序集。

【问题讨论】:

    标签: msbuild continuous-integration teamcity


    【解决方案1】:

    未找到的引用是第 3 方(您不编译的代码)还是您的代码?

    如果是第三方,那么您要确保您指向的源代码控制存储库根目录会导致依赖项也被检出。 (或者更糟糕的是,将它们放在 GAC 中或将它们安装在每个构建服务器上,除非你必须这样做,否则这不是一个好主意)

    如果您的代码是由同一解决方案中的项目构建的,还是由不同的解决方案构建的?

    在某种程度上,您可以使一个项目依赖于另一个项目,然后将构建指向解决方案,这是一件好事。

    如果有 2 个不同的解决方案,那么您必须使用 Dependencies(第 5 节)来设置 Artifact 依赖项。

    【讨论】:

    • 这是一个解决方案,没有第三方的东西。问题是,解决方案中的所有项目都将其 OutputPath 指令(用于所有构建配置)设置为“../../bin/$(Configuration)”,而不是默认的“bin/$(Configuration)”。这意味着构建输出被放置在解决方案结构之外的目录中。 VS 可以很好地处理这个问题,TC 构建到正确的 OutputPath,但是当另一个项目依赖于刚刚构建并丢弃到 OutputPath 的项目时,它就会失败。
    • 依赖项目找不到自己依赖的项目的程序集。我认为问题在于 TC 在解析程序集引用时并未设计为遵循 OutputPath 指令。我已经用 TC 提出了一个错误,同时我会尝试你的工件依赖关系的想法。
    【解决方案2】:

    您是否在 teamcity 中使用解决方案运行程序?如果是这样,则在每个 csproj 中指定引用的位置。您不需要进行任何额外的配置。

    验证引用是项目引用而不是程序集引用。程序集引用可能指向 ../../bin/debug/assembly.dll,在发行版中编译时无法解析。

    您可以查看 csproj 进行确认,或者 Visual Studio 将仅在“属性”中显示“特定版本”下拉列表以获取程序集引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多