Visual Studio 2008:找不到对项目的引用
本文关键字:项目 引用 找不到 Studio 2008 Visual | 更新日期: 2023-09-27 18:00:03
我们有一个用C#编写的应用程序,它分为几个项目。这些项目对其他项目有借鉴意义。
当有人从版本控制中获取源代码并在自己的计算机上打开包含这些项目的解决方案时,即使引用的项目已成功生成,Visual Studio也无法找到项目之间的引用。那个人必须重新添加引用才能解决这个问题。
在我看来,Visual Studio在"suo"文件中保留了一些数据,所以下次它知道在哪里可以找到重新添加的引用,而且下次打开解决方案时不会出现这个问题。
由于"suo"文件保留引用的绝对路径,因此我们无法在源代码管理中提交它。
问题是,我们有一台单独的机器,它会自动构建这个大型应用程序(就像我们的夜间构建版本一样)。当构建自动化工具打开解决方案,并调用Visual Studio的编译器来构建它时,无法找到引用。(自动化工具会清理所有内容,并再次获取源的最新版本,因此它没有"suo"文件。)
有什么解决方案吗?
额外信息
Visual Studio版本:2008-9.0.21022.8
Net框架:3.5 SP1
操作系统:Windows XP专业版(SP2和SP3-我们都有)
更新
Visual Studio似乎有时会将".csproj"文件中的<ProjectReference>
标记更改为<Reference>
。我们的开发人员提交了文件,然后出现了这个问题。
我找不到它是否是Visual Studio中的错误。我想到的唯一解决方案是在将其传递给自动化工具之前,在".csproj"文件中编写一个工具来更正此问题。
在.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"。编辑完成后,再次右键点击并重新加载项目。
打开项目文件(*.csproj),看看它们引用了什么。请确保这些路径是相对于解决方案路径的,并且您的构建脚本可能会使用其他路径。
解决这一问题的一种方法:
- 定义一个环境变量SOURCE_PATH,用于保存源根文件夹的路径
- 编辑项目文件,使其在csproj文件中具有相对于此路径的引用(使用
$(SOURCE_PATH)
)以引用它 - 在每台开发/构建机器上重复步骤1-2,并在需要时添加额外的env变量
PS:*.suo不应该在版本控制系统中。
为什么不使用msbuild而不是自动化visualstudio编译器?
这是VisualStudio2008及其之前版本中的一个错误。
如果打开的解决方案包含一个引用了另一个项目的项目,但引用的项目不包含在该解决方案中,VS会找到引用的项目,但是会以引用输出DLL而不是项目本身的方式更改引用。
此错误已在VS2010和MSBuild 4中修复。