Visual Studio 2008:无法找到对项目的引用

时间:2011-06-22 07:23:43

标签: c# .net visual-studio-2008

我们在C#中编写了一个应用程序,它分为几个项目。这些项目参考了其他项目。

当某人从版本控制获取源并打开解决方案在其自己的计算机上包含这些项目时,即使已成功构建引用的项目,Visual Studio也无法找到项目之间的引用。那个人必须重新添加引用来解决这个问题。

在我看来,Visual Studio会在`suo'文件中保留一些数据,因此下次它知道在哪里找到重新添加的引用,并且下次此人打开解决方案时不会出现此问题。

由于`suo'文件保留了引用的绝对路径,因此我们无法在源代码控制中提交它。

问题是,我们有一个单独的机器,它自动构建这个大应用程序(作为我们的夜间构建版本)当构建自动化工具打开解决方案,并调用Visual Studio的编译器来构建它时,引用无法找到。 (自动化工具清理所有内容,并再次获取最新版本的源代码,因此它没有'suo'文件。)

任何解决方案?

额外信息

Visual Studio版本:2008 - 9.0.21022.8

.Net framework:3.5 SP1

操作系统:Windows XP Professional(SP2& SP3 - 我们都有)

更新

似乎Visual Studio有时会在`.csproj'文件中将<ProjectReference>标记更改为<Reference>。我们的开发人员提交文件,这个问题就发生了。

我无法找到它是否是Visual Studio中的错误。我想到的唯一解决方案就是在将.csproj文件传递给自动化工具之前编写一个工具来纠正它。

4 个答案:

答案 0 :(得分:2)

引用在每个项目的.csproj文件中定义。它们可以用两种方式中的一种来定义(根据我的经验)。

使用提示路径查找引用的程序集:

<Reference Include="CommonServiceLocator.NinjectAdapter, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\..\Dependencies\CommonServiceLocator.NinjectAdapter.dll</HintPath>
</Reference>

或者没有一个:

<Reference Include="CommonServiceLocator.NinjectAdapter, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL"/>

您需要确保引用位于第一种形式,提示路径存在,并且它是一个相对路径,以便无论您在何处查看解决方案,它都可以正常工作。

您可以使用外部编辑器编辑.csproj文件,或者右键单击项目,从上下文菜单中选择“卸载项目”,然后再次右键单击卸载的项目并选择“编辑项目名称”。的csproj”。完成编辑后,再次右键单击并重新加载项目。

答案 1 :(得分:1)

打开项目文件(* .csproj)并查看它们引用的内容。大多数情况下,路径是相对于解决方案路径的,而构建脚本可能会使用其他路径。

解决此问题的一种方法:

  1. 定义一个环境变量SOURCE_PATH,用于保存源根文件夹的路径
  2. 编辑项目文件,以便他们在csproj文件中引用相对于此路径的引用(使用$(SOURCE_PATH))来引用它
  3. 在每台开发/构建计算机上重复步骤1-2,并根据需要添加额外的env变量。
  4. PS:* .suo不应该在版本控制系统中。

答案 2 :(得分:0)

为什么不使用msbuild而不是自动化Visual Studio编译器?

答案 3 :(得分:0)

这是VisualStudio 2008中的一个错误,在此之前。

如果您打开的解决方案包含一个引用另一个项目的项目,但引用的项目未包含在解决方案中,则VS会找到引用的项目,但会以引用输出DLL的方式更改引用而不是项目本身。

此错误已在VS2010和MSBuild 4中修复。