我有一个 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。
那么,我做错了什么?谢谢
我看到你正在使用ProjectReference
,这是我在普通(非 NET)C++ 项目中所熟悉的。 Include属性需要给文件命名,而不仅仅是基本名称;例如
<ProjectReference Include="..\..\Proj1\ExternalProj1.vcxproj">
那是,ProjectReference
is not Reference
. See 常见的 MSBuild 项目项 http://msdn.microsoft.com/en-us/library/bb629388%28v=vs.100%29.aspx
此外,如果没有为该项目指定元数据,则确定是否自动链接 LIB 的元数据是通过提供的 props 文件确定的。托管项目是否会生成 LIB?因此,这应该(文件名正确)导致指定项目也作为依赖项目构建,而对其产品进行某些操作则完全是另一个问题。
尝试从 MSBuild.exe 命令行(而不是 IDE)进行构建,以便在 IDE 搞乱事情或添加更多需要解决的问题之前查看纯粹的行为。并且,向其提供您想要的特定项目文件,not“解决方案”文件。 .sln 文件是一个奇怪的野兽,不仅可能有 sln 中不存在的项目引用,而且根本没有 sln 文件的固有概念。除了在 IDE 中显示的项目列表之外,它是一个动态转换为主项目的神奇文件,可让您单独命名各个目标,而无需知道哪个项目文件(或其路径)足够方便,但主要是为了与 VSBuild 兼容图书。因此要避免它,至少要简化事情,以便在探索阶段获得您想要的行为。如果您仍然需要任何复杂功能,然后重新添加它们:)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)