And*_*dry 3 .net c# msbuild csproj visual-studio
我有一个包含一些项目的 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>
Run Code Online (Sandbox Code Playgroud)
但是,我必须引用项目,以便这些项目生成它们的 dll。事实上,如果我引用了 dll 而它们还没有被创建,我需要单独构建这些项目。
但是,在引用项目时:
<ItemGroup>
<ProjectReference Include="..\..\Proj1\ExternalProj1">
<Project>{3341b552-a569-4313-aabc-34452fff60ac}</Project>
<Name>ExternalProj1</Name>
</ProjectReference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
但是在构建编译器时找不到这些程序集。奇怪的是,构建过程报告为成功完成,但错误窗口报告了一个警告:
找不到引用的组件 ExternalProj。
那么,我做错了什么?谢谢
我看到您正在使用ProjectReference
,这是我在普通(非 NET)C++ 项目中所熟悉的。Include 属性需要命名文件,而不仅仅是基本名称;例如
<ProjectReference Include="..\..\Proj1\ExternalProj1.vcxproj">
Run Code Online (Sandbox Code Playgroud)
也就是说,ProjectReference
不是Reference
。查看常见的 MSBuild 项目项
此外,如果未为该项目指定元数据,则通过提供的道具文件确定是否自动链接 LIB。托管项目甚至会生成 LIB 吗?所以这应该(文件名正确)导致指定的项目也被构建为依赖项,对其产品做一些事情完全是另一个问题。
尝试从 MSBuild.exe 命令行而不是 IDE 构建,以在 IDE 搞砸事情或添加更多问题之前查看纯行为。并且,向它提供您想要的特定项目文件,而不是“解决方案”文件。.sln 文件是一个奇怪的野兽,不仅 sln 中可能没有项目引用,而且根本没有 sln 文件的固有概念。除了要在 IDE 中显示的项目列表之外,它是一个即时转换为主项目的魔法文件,让您可以单独命名各种目标,而无需知道哪个项目文件(或它的路径)足够方便,但主要是为了与The Books 中的VSBuild 兼容. 所以避免它,至少在探索阶段简化事情以获得你想要的行为。如果您仍然想要它们,然后添加任何并发症:)。