【问题标题】:How to reference a project out of solution?如何引用解决方案中的项目?
【发布时间】:2014-10-11 11:24:21
【问题描述】:

我有一个包含一些项目的 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。

那么,我做错了什么?谢谢

【问题讨论】:

  • 为什么DLL存放在Proj1\ExternalProj1.dll而不是Proj1\Bin\Release\ExternalProj1.dll??您是否正确记录了这个问题?
  • 您不能引用不属于您的解决方案的项目;你只能引用它的输出程序集。
  • @ThomasLevesque 你当然可以! “解决方案”是海市蜃楼。项目通过文件名引用带有ProjectReference 的其他项目。当您完全丢弃 sln 文件时它们起作用的事实应该告诉您一些事情。 (注意,他使用的是ProjectReference,而不是我没有直接经验的Reference
  • @jdlugosz,谢谢你的提示,我不知道

标签: c# .net visual-studio msbuild csproj


【解决方案1】:

我看到您正在使用ProjectReference,这是我在普通(非 NET)C++ 项目中所熟悉的。 Include 属性需要命名文件,而不仅仅是基名;例如

<ProjectReference Include="..\..\Proj1\ExternalProj1.vcxproj">

也就是说,ProjectReference 不是Reference。见Common MSBuild Project Items

此外,如果没有为该项目指定,则通过提供的道具文件确定是否自动链接 LIB 的元数据。托管项目甚至会产生 LIB 吗?因此,这应该(使用正确的文件名)导致指定项目也作为依赖项构建,对其产品做某事完全是另一个问题。

尝试从 MSBuild.exe 命令行而不是 IDE 构建,以在 IDE 搞砸或添加更多问题之前查看纯粹的行为。并且,将您想要的特定项目文件提供给它,而不是“解决方案”文件。 .sln 文件是一种奇怪的野兽,不仅可以在 sln 中不存在项目引用,而且根本没有 sln 文件的固有概念。除了要在 IDE 中显示的项目列表之外,它是一个动态转换为主项目的魔术文件,让您可以单独命名各种目标,而无需知道哪个项目文件(或其路径)足够方便,但主要是为了与 The Books 中的 VSBuild 兼容。所以避免它,至少在探索阶段简化事情以获得你想要的行为。如果您仍然想要它们,然后添加任何并发症:)。

【讨论】:

  • 在 .dotnet 项目中的工作方式也相同。安德里这是正确的答案。 Sln 不需要构建,每个项目都是独立的。尝试使用 MSbuild.exe。
  • 至少因为它在 VS 2019 中不起作用。好得令人难以置信:(
猜你喜欢
  • 2010-09-24
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多