2014-10-11 51 views
1

我有一個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並且它們尚未創建,我需要分別構建這些項目。

但是引用時項目:

<ItemGroup> 
    <ProjectReference Include="..\..\Proj1\ExternalProj1"> 
    <Project>{3341b552-a569-4313-aabc-34452fff60ac}</Project> 
    <Name>ExternalProj1</Name> 
    </ProjectReference> 
</ItemGroup> 

然而,當構建編譯無法找到這些組件。奇怪的是,構建過程報告已成功完成,但錯誤窗口報告一個警告:

無法找到引用的組件ExternalProj。

那麼,我做錯了什麼?謝謝

+0

爲什麼DLL存儲在Proj1 \ ExternalProj1.dll而不是Proj1 \ Bin \ Release \ ExternalProj1.dll中?你是否正確記錄了這個問題? – 2014-10-11 11:29:04

+6

您不能引用不屬於您的解決方案的項目;你只能參考它的輸出組件。 – 2014-10-11 11:31:23

+5

@ThomasLevesque你當然可以! 「解決方案」是一個海市蜃樓。項目通過文件名引用具有「ProjectReference」的其他項目。事實上,他們的工作,當你完全拋棄sln文件應該告訴你一些事情。 (注意,他使用'ProjectReference',而不是'Reference',我沒有直接經驗) – 2014-10-11 18:59:25

回答

4

我看到你正在使用ProjectReference,這是我在純(非NET)C++項目中熟悉的。 Include屬性需要命名文件,而不僅僅是基本名稱;例如

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

也就是說,ProjectReferenceReference。請參閱Common MSBuild Project Items

另外,如果未爲該項目指定,則通過提供的道具文件確定是否自動鏈接LIB的元數據。管理項目是否生產LIB?因此,這應該(與文件名正確)導致提名的項目也建立爲一個依賴項,與其產品做一些事情是另一個問題。

嘗試從MSBuild.exe命令行(而不是IDE)構建,以便在IDE解決問題之前查看純行爲,或者添加更多問題以解決問題。並且,餵它你想要的特定proj文件,而不是「解決方案」文件。 .sln文件是一個奇怪的野獸,不僅可能讓項目引用不在sln中出現,也沒有sln文件的固有概念。除了在IDE中顯示的項目列表之外,它是一個魔術文件,可以隨時轉換爲主程序,讓您可以單獨命名各個目標,而無需知道哪個proj文件(或其路徑)足夠方便,但主要是爲了兼容VSBuild根據The Books。所以要避免它,至少要簡化一些事情,以便在探索階段獲得你想要的行爲。然後添加任何複雜的東西,如果你仍然想要它們:)。

+1

在.dotnet項目中的工作方式也一樣。安德里,這是正確的答案。 Sln不需要構建,每個proj都獨立運行。嘗試使用MSbuild.exe。 – 2014-10-13 10:51:43

相關問題