我有一个Visual Studio C#解决方案,它包含一些项目。其中一个项目需要引用另一个不属于解决方案的项目。
一开始我正在引用dll:
<ItemGroup>
<Reference Include="ExternalProj1, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Proj1\ExternalProj1.dll</HintPath>
</Reference>
</ItemGroup>
但是我必须引用项目,以便那些将生成他们的dll。事实上,如果我引用dll并且它们尚未创建,我需要单独构建这些项目。
但是在引用项目时:
<ItemGroup>
<ProjectReference Include="..\..\Proj1\ExternalProj1">
<Project>{3341b552-a569-4313-aabc-34452fff60ac}</Project>
<Name>ExternalProj1</Name>
</ProjectReference>
</ItemGroup>
但是,构建编译器时无法找到那些程序集。奇怪的是,构建过程报告为已成功完成,但错误窗口报告了一个警告:
找不到引用的组件ExternalProj。
那么,我做错了什么?谢谢
答案 0 :(得分:4)
我看到你正在使用ProjectReference
,这是我在普通(非NET)C ++项目中所熟悉的。 Include属性需要命名文件,而不仅仅是基本名称; e.g。
<ProjectReference Include="..\..\Proj1\ExternalProj1.vcxproj">
也就是说,ProjectReference
不是Reference
。见Common MSBuild Project Items
此外,如果没有为该项目指定,则通过提供的道具文件确定是否自动链接LIB的元数据。管理项目是否甚至产生了LIB?所以这应该(文件名正确)导致指定项目也作为依赖项构建,对其产品做一些事情是另一个问题。
尝试从MSBuild.exe命令行而不是IDE构建,以便在IDE混乱之前查看纯粹的行为,或者添加更多问题。并且,为它提供您想要的特定proj文件,不“解决方案”文件。 .sln文件是一个奇怪的野兽,不仅可以让sln中没有项目引用,根本没有sln文件的固有概念。除了要在IDE中显示的项目列表之外,它是一个魔术文件,可以动态转换为主项目,可以让您单独命名各种目标,而无需知道哪个proj文件(或其路径)足够方便,但主要是根据 The Books 与VSBuild兼容。所以要避免它,至少要简化一些事情,以便在探索阶段获得你想要的行为。然后,如果您仍然想要它们,请添加任何并发症:)。