Visual studio 2010 Microsoft(TFS)生成服务器-类型或命名空间名称'';命名空间';中不存在';(是否缺少程序集引用?)
我正在为我们的团队设置buildserver 背景Visual studio 2010 Microsoft(TFS)生成服务器-类型或命名空间名称'';命名空间';中不存在';(是否缺少程序集引用?),visual-studio-2010,tfsbuild,Visual Studio 2010,Tfsbuild,我正在为我们的团队设置buildserver 背景 我们正在使用Microsoft Visual Studio 2010 Ultimate。我们的产品包含C代码(主要)、外部DLL和C代码。我们正在使用.NET4.0,有70多个项目 我们正在处理代码的3个分支: 生产部门(目前发布的内容) 测试分支(热修复、错误修复、最终用户测试) 发展分部(添加新功能) 所有分支都在TF源控制下 目标 我们想要的是有一个构建服务器,每天为所有分支构建和运行一次所有单元测试,构建服务器应该使用源代码管理中的
我们正在使用Microsoft Visual Studio 2010 Ultimate。我们的产品包含C代码(主要)、外部DLL和C代码。我们正在使用.NET4.0,有70多个项目 我们正在处理代码的3个分支:
- 生产部门(目前发布的内容)
- 测试分支(热修复、错误修复、最终用户测试)
- 发展分部(添加新功能)
我们想要的是有一个构建服务器,每天为所有分支构建和运行一次所有单元测试,构建服务器应该使用源代码管理中的代码。我们的目标是有一些快速的标准错误检测。我们宁愿少维护构建服务器,而不是不维护 我们不打算使用buildserver生成的构建,我们只想使用buildserver不断地构建和单元测试我们的分支 设置了什么
目前有两个构建定义,一个用于测试分支,另一个用于开发分支,这两个构建定义都是从源代码管理中获取代码的(这一部分很好),但这里是乐趣的开始 问题
测试分支可以很好地构建和运行单元测试 由于(或类似5个)错误,开发分支无法构建: 错误是针对项目X引用项目Y。项目X和Y都是C#.Net 4.0项目,我们完全控制它们,X和Y都编译到DLL。项目Y包含项目X中的类正在实现的接口 恼人的细节是,无论是项目X还是项目Y,测试分支和开发分支都没有区别。这两个项目在过去3个月内完全相同 所以问题是,为什么它在测试部门工作而在开发部门不工作 我已经测试过:
-这些项目相互之间的引用是正确的。 -所有3个分支在我自己/我的任何同事开发机器上构建都没有问题(我们在5台不同的机器上进行了测试)。 -我试图删除整个X项目并重新创建它,但没有成功。 -我试图删除整个Y项目并重新创建它,但没有成功。 -我试图更改ProjectX项目及其类的名称空间,但没有成功。 -我试图更改project Y project及其类的名称空间,但没有成功。 -(我甚至重新启动了我的开发机器) -在buildserver设置为build之后,所有更改都会签入源代码管理中 额外信息
我一直在挖掘日志文件,发现了一些有趣的细节,这是关于在开发部门构建项目X的细节
Task "AssignProjectConfiguration"
Project reference "..\..\A" has been assigned the "Debug|x86" configuration.
Project reference "..\..\Y" has been assigned the "Debug|x86" configuration. (can see there is a project Y)
Project reference "..\..\B" has been assigned the "Debug|x86" configuration.
但是在任务“ResolveAssemblyReference”中
Task "ResolveAssemblyReference"
TargetFrameworkMoniker:
.NETFramework,Version=v4.0
TargetFrameworkMonikerDisplayName:
.NET Framework 4
TargetedRuntimeVersion:
v4.0.30319
Assemblies:
System
System.Xml.Linq
System.Data.DataSetExtensions
Microsoft.CSharp
System.Data
System.Xml
System.Core
AssemblyFiles:
C:\Builds\1\A
C:\Builds\1\B
(----- Missing project Y -----)
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
同一任务的测试分支在何处
Task "ResolveAssemblyReference"
TargetFrameworkMoniker:
.NETFramework,Version=v4.0
TargetFrameworkMonikerDisplayName:
.NET Framework 4
TargetedRuntimeVersion:
v4.0.30319
Assemblies:
System
System.Data.Entity
System.Xml.Linq
System.Data.DataSetExtensions
Microsoft.CSharp
System.Data
System.Xml
System.Core
AssemblyFiles:
C:\Builds\1\A
C:\Builds\1\B
C:\Builds\1\Y (There it is)
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
因此,出于某种原因,感觉它只是“忘记”了从项目X到项目Y的引用
帮助我也有同样的问题 我花了几个小时才发现,在这种情况下,问题不是我的错:-) : 出现此问题的原因是.NET Framework库中的Path.GetFullPath中存在错误。 这是VisualStudio2010中的一个已知问题 症状: 。。。当您尝试构建具有多个 项目之间存在依赖关系,在 特定条件生成失败,并显示以下错误消息 错误消息: “C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets (1200,9):警告:引用的项目与 当前目录“”中引用的项目不存在 当以下情况发生时,生成失败,并显示上面的错误消息 条件得到满足
我最近遇到了同样的错误。在VS2010中本地构建的解决方案很好,但在构建服务器上始终失败。最后,MSBuild定义设置为版本x86配置,但项目引用了bin\x86\Debug中的程序集,而不是bin\x86\Release中的程序集
验证引用的是程序集的发布版本而不是调试版本(并根据需要进行更正)似乎对我起到了作用。我刚刚遇到了一个类似的问题,最后处理代码的开发人员决定在obj\debug目录中添加对某些DLL的引用 不幸的是,我这边的问题完全不同 我正在为相同的通用代码构建两个不同的版本,一个用于.Net4,另一个用于Silverlight 5
Task "ResolveAssemblyReference"
TargetFrameworkMoniker:
.NETFramework,Version=v4.0
TargetFrameworkMonikerDisplayName:
.NET Framework 4
TargetedRuntimeVersion:
v4.0.30319
Assemblies:
System
System.Data.Entity
System.Xml.Linq
System.Data.DataSetExtensions
Microsoft.CSharp
System.Data
System.Xml
System.Core
AssemblyFiles:
C:\Builds\1\A
C:\Builds\1\B
C:\Builds\1\Y (There it is)
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
<ProjectReference Include="..\B.csproj">
<Project>{F3006530-D421-4A89-AA8B-376DBAA31E03}</Project> - wrong Id!
<Name>ProjectB</Name>
</ProjectReference>