2

项目 A 引用项目 B。项目 B 引用项目 C。项目 A 不引用项目 C。

这在本地构建良好。但是,在构建服务器上它会出错,因为项目 A 没有引用项目 C。

错误:

错误 BC30009:需要对包含已实现接口“ProjectC.IFoo”的程序集“ProjectC,版本=1.0.0.0,Culture=neutral,PublicKeyToken=null”的引用。将一个添加到您的项目中。

我怎样才能在提交之前抓住这个?

编辑:这是关于我的问题的更多信息:http: //sstjean.blogspot.com/2006/11/msbuild-cant-find-secondary-references.html

4

2 回答 2

1

作为最佳实践,您可以执行以下两件事,以确保正确引用您的项目,并且 MSBuild 将能够正确找到您引用的项目。

  1. 使用项目引用而不是引用 dll。创建一个名为 dependencies 或 libs 的文件夹,并将所有引用的 dll 放在此文件夹中。

  2. 通过右键单击项目并选择项目构建顺序来检查每个项目的构建顺序和项目依赖项选项卡。确保项目中的每个引用都是由该项目构建的。

MSBuild 不知道 .sln 文件是什么。MSBuild 读取并解析 .sln 文件以确定项目的构建顺序。通过拥有项目引用,MSBuild 将能够以正确的顺序遍历和构建项目。有关更多信息,请参见下面的链接。

此链接还有助于解释为什么您会看到不同的行为以及如何捕捉它。

Visual Studio 集成 (MSBuild)

在 Visual Studio 中,解决方案文件和项目生成顺序由 Visual Studio 本身控制。在命令行上使用 msbuild.exe 构建解决方案时,MSBuild 会解析解决方案文件并订购项目构建。在这两种情况下,项目都是按依赖顺序单独构建的,并且不会遍历项目到项目的引用。相反,当使用 msbuild.exe 构建单个项目时,将遍历项目到项目的引用。

在 Visual Studio 中构建时,属性 $(BuildingInsideVisualStudio) 设置为 true。这可以在您的项目或 .targets 文件中使用,以使构建行为不同。

于 2013-04-29T15:33:34.087 回答
0

转到您的项目引用并右键单击Oracle.DataAccess然后转到属性并在属性页面中确保特定版本为 false 并将复制到本地设置为 true。

于 2020-02-06T08:11:16.607 回答