2017-04-10 82 views
1

我創建三個項目如下:有沒有辦法來判斷一個項目是否引用瞭解決方案中的另一個項目,或者只是它的二進制文件?

  1. ConsoleApp(控制檯應用程序)

  2. ProjectReference(類庫)

  3. BinaryReference(類庫)

向每個在上面提到的類庫中,我添加了一個類如下:

ProjectReference

namespace ProjectReference 
{ 
    public class Class1 
    { 
    public string Property1 = "Property 1 from project reference."; 
    } 
} 

BinaryReference

namespace BinaryReference 
{ 
    public class Class1 
    { 
    public string Property1 = "Property 1 from binary reference."; 
    } 
} 

然後,在ConsoleApp項目,我點擊添加引用解決方案選擇的ProjectReference類庫項目 - >項目選項卡。

然後我點擊再次添加引用在ConsoleApp項目,這次從瀏覽選項卡上,我選擇了BinaryReference類庫項目的二進制文件。

接下來,我構建解決方案。我擴展了參考節點爲ConsoleApp來看看我的兩個參考的屬性,他們出現正好相同。如果不是我給他們命名的方式,我不能告訴哪一個是項目參考,哪一個是二元的。

質詢

這讓我想知道這兩個東西:

  1. 有沒有辦法告訴從另一個?

  2. 如果兩個參考目標都在相同的解決方案中,那麼它更重要嗎?無論如何,當您在Visual Studio中構建解決方案時,它們都將以正確的順序構建。

即使我本來想自定義生成序列,並希望有一個MS構建腳本這個,而不是Visual Studio中建立它,它仍然也就沒有什麼區別既引用的項目必須要建首先,因爲它們是ConsoleApp項目的依存關係?

  1. 一個比另一個更好嗎?我曾經認爲項目的參考比較好,但現在我正在以這種方式批判性地審視他們所持有的小信念。

  2. 事情可能會有所不同,如果BinaryReference沒有在解決方案中的項目,但在另一種解決方案的一個項目(但不是我從未有過的,因爲那麼這是不是一個有爭議的問題的來源,我們有與我們引用的每個微軟或第三方程序集)?在這種情況下,它會要求我打開其他溶液,其BinaryReference作爲項目參考和去之前建立這個解決方案,其中BinaryReference是一個二進制參考構建。

即使我已經編寫好幾年了,我把所有這些問題了,是因爲我在看與溶液中的一個極大的項目的大型企業項目,一些引用是可疑二進制,而不是項目。棘手的部分是:項目名稱與它們生成的程序集名稱不同。

+0

所以...爲什麼你關心的一些是在大項目引用和其他二進制文件? – JuanR

+0

引用鬆散的DLL已成爲過去。將它們包裝在NuGet包中並部署到NuGet服務器,以便您可以管理版本依賴性。如果它在相同的解決方案中,那麼可以做一個項目引用。 – mason

+1

相關[github上的問題(https://github.com/dotnet/roslyn/issues/4358):「Visual Studio的2015年不再使用二進制參考時,其項目相同的解決方案加載庫」 –

回答

1

的差異可以通過檢查*.csproj文件的具體項目,這是一個XML文件來告知。二進制引用使用Reference節點,如下所示。

<Reference Include="{some info}"> 
    <SpecificVersion>{some value}</SpecificVersion> 
    <HintPath>{some path}</HintPath> 
    <Private>{some value}</Private> 
</Reference> 

項目參考使用一個ProjectReference節點,如下所示。

<ProjectReference Include="{some path}"> 
    <Project>{some guid}</Project> 
    <Name>{some name}</Name> 
</ProjectReference> 
+1

謝謝。 6分鐘。 –

+0

沒有直接關係,但我浪費了一些時間,直到我發現不是,不是的MSBuild的每一個功能是在Visual Studio IDE訪問。 – Codor

0

無論您是從項目還是從二進制文件加載引用,它們都由文件路徑加載。它不會做任何不同無論是從一個項目或二進制文件時的解決方案是建立比其他加載,你知道相關的組件還內置的時間。

我曾在一個企業項目(50級或更多的解決方案和200多個項目),它的方式是設置是有一個內部的熔核服務器,並把每個項目的最新版本在此服務器上。因此,當另一個項目引用程序集時,它會查看此本地塊金服務器,並在需要時獲取最新的程序集文件。

相關問題