将OutDir与MsBuild一起使用时,解决方案无法构建

时间:2013-10-17 20:12:14

标签: c# .net build msbuild

我们有几个.Net 4.0解决方案都依赖于一个特定解决方案构建的程序集,我们的Server.sln(我想Shared.sln本来是一个更好的名称)。我们的构建过程首先使用MsBuild OutDir parameter将Server.sln构建到Binaries目录,然后使用OutDir参数指定路径,然后使用子目录的后续解决方案(例如Binaries \ Client,Binaries \ Web等)。到适当的子目录。这使我们可以轻松地将单独的应用程序发布到不同的位置。这适用于我们所有的解决方案,除了我们创建的新API.sln。

与其他解决方案一样,API.sln引用Server.sln构建的一些DLL,但我得到的实际编译错误是一个项目(我们称之为Project1)无法找到对Project2的引用。 Project1和Project2都是API.sln中的项目,Project1通过项目引用引用Project2;不是dll文件引用。此外,Project2也没有任何外部依赖项;它唯一的引用是 System System.Core System.Runtime.Serialization

如果我将OutDir设置为Binaries目录,那么一切都有效,但我不想这样做,因为所有的API.sln程序集都与所有Server.sln程序集混合在一起,这使得部署只是API.sln程序集更难。当我将OutDir设置为Binaries \ API时,我得到构建错误,说:

The name '[Project2 Class Name]' does not exist in the current context [Path to Project1.csproj]

我检查了,并且Project1.dll和Project2.dll程序集都被创建到Binaries \ API目录,所以我不确定为什么会生成此错误。我们的TFS构建服务器有这个问题,但我也可以通过在.slns上使用相同参数调用MsBuild在我的本地机器上重新创建它。有什么想法吗?

以下是我用来实际构建的两个msbuild命令:

构建Server.sln:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe /nologo "C:\PlatformAPIBuild\BuildProcessTests\Sources\RQ4.Server.sln" /nr:False /fl /flp:"logfile=C:\PlatformAPIBuild\BuildProcessTests\Sources\RQ4.Server.log;encoding=Unicode;verbosity=normal" /p:SkipInvalidConfigurations=true /p:ReferencePath=C:\PlatformAPIBuild\BuildProcessTests\Binaries  /p:OutDir="C:\PlatformAPIBuild\BuildProcessTests\Binaries\\" /p:Configuration="Release" /p:Platform="Any CPU" /p:VCBuildOverride="C:\PlatformAPIBuild\BuildProcessTests\Sources\RQ4.Server.sln.Any CPU.Release.vsprops"

然后构建API.sln:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /nologo "C:\PlatformAPIBuild\BuildProcessTests\Sources\IQ.Platform.PublicAPI.sln" /nr:False /fl /flp:"logfile=C:\PlatformAPIBuild\BuildProcessTests\Sources\IQ.Platform.PublicAPI.log;encoding=Unicode;verbosity=normal" /p:SkipInvalidConfigurations=true /p:ReferencePath=C:\PlatformAPIBuild\BuildProcessTests\Binaries  /p:OutDir="C:\PlatformAPIBuild\BuildProcessTests\Binaries\Platform.PublicAPI\\" /p:Configuration="Release" /p:Platform="Any CPU" /p:VCBuildOverride="C:\PlatformAPIBuild\BuildProcessTests\Sources\IQ.Platform.PublicAPI.sln.Any CPU.Release.vsprops" 
来自API.sln构建的{p>和here is the log file。您会注意到它有错误,

Warning as Error: Reference to type 'IQ.Platform.Framework.WebApi.Model.Hypermedia.AccessControl' claims it is defined in 'c:\PlatformAPIBuild\BuildProcessTests\Binaries\Platform.PublicAPI\IQ.Platform.Framework.WebApi.Model.dll', but it could not be found

但它所说的文件不存在,实际上是在我在构建失败后查找它时,你可以看到它在日志文件顶部做的第一件事就是将该程序集复制到那条路,所以我不确定为什么它找不到它。在我上面的讨论中,IQ.Platform.Framework.WebApi.Model是Project2。

来自API.sln构建的

Here is the log file删除了所有Test项目,因此只剩下一个错误,这有望使查看日志文件更容易一些。并here is the same log, but with diagnotic verbosity

0 个答案:

没有答案