我正在从2008年升级到2013年的Visual Studio解决方案。由于许可问题,我将在构建服务器上使用msbuild.exe而不是devenv.com。
但是我遇到了一个链接错误,它似乎是特定于msbuild.exe的。即使用devenv.com构建时没有问题。
调试问题我发现了链接命令之间的区别。提供错误的项目(testA)取决于项目(projectA)。此依赖项是在Visual Studio 2013 项目依赖项/项目引用中设置的。
但是我们不希望testA使用这种方法来链接projectA(我们有另一种机制来进行链接)。因此,项目参考属性的链接库依赖项属性设置为False。在.vcxproj中,看起来像
<ProjectReference Include="..\..\projectA.vcxproj">
<Project>{472cd426-5c95-4f53-97f8-bf7c4425d1d4}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
<Private>true</Private>
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
<LinkLibraryDependencies>false</LinkLibraryDependencies>
<UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
</ProjectReference>
对于Visual Studio 2013(aka devenv.com),这很好。 projectA没有链接。
但是msbuild.exe不尊重这个属性。在命令行上,我看到它与projectA.lib链接。这给出了以下错误
error LNK2005: "public: bool __thiscall projectA::mymethod(void)const "
(?ismethod@projectA@@QBE_NXZ) already defined in myobject.obj
这是一个已知问题。有解决方法吗?