![](/img/trans.png)
[英]How to document C# projects/assemblies with XML comments and Doxygen?
[英]How C# projects link the assemblies
我想問一個有關C#如何鏈接其依賴項的方式的問題。
第一種情況:我有一個C#項目,可以鏈接例如系統程序集。 如果我從Assembly-> Framework窗口添加引用:
程序集的路徑為: C:\\ Program Files(x86)\\ Reference Assemblies \\ Microsoft \\ Framework.NETFramework \\ v4.5.2 \\ System.dll
但是,如果啟用了.nuget並下載了程序集,則指向系統程序集的鏈接將被神奇地更改為: C:\\ Users \\ .nuget \\ packages \\ Microsoft.NETCore.Portable.Compatibility \\ 1.0.0 \\ ref \\ netcore50 \\ System.dll中
我之所以說“神奇”是因為我看不到明確指出的地方-從現在開始沿那個方向進行組裝。
第二種情況:當我下載了.nuget程序集時,在“項目參考”窗口中,我看到下一件事:
不同版本的兩個程序集鏈接到我的項目,一個來自.nuget所在的地方,另一個來自.NET Framework所在的地方。 問題:將考慮哪一個? 都?
不過,只是一個想法。
當我使用C ++項目時,一切都非常清晰明了,我可能安裝了幾種不同的SDK,但是當我定義要使用的SDK版本和工具集時,-該項目將從定義的位置獲取程序集。 除非我指定,否則它不會嘗試從其他位置加載內容。
也許C#項目具有類似的配置功能,但我不了解它們。 有人可以幫助我理解這一點嗎?
更新
剛意識到我在這里的聲明: 當我下載了.nuget程序集時,在“項目參考”窗口上,我看到了下一件事:可能令人困惑。 將我列出的全屏快照添加到不同的程序集版本:
這個問題有點混亂。 您需要考慮的重要區別是Visual Studio如何引用程序集以及編譯后的應用程序將如何進行引用 。
當您在Visual Studio中添加引用時,它將在csproj文件中添加一條記錄:
<Reference Include="Microsoft.Owin, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.Owin.3.1.0\lib\net45\Microsoft.Owin.dll</HintPath>
<Private>True</Private>
</Reference>
上面包含“提示路徑”。 這就告訴Visual Studio它認為程序集所在的位置。 編譯應用程序時,VS將檢查此路徑以進行匯編。
當您使用Nuget安裝部件時。 Nuget將程序集添加到packages
文件夾,並將對該程序集的引用添加到您的csproj文件中。 帶有指向該位置的提示路徑。 因此,VS將在此位置加載程序集。
編譯應用程序時,其結果是可運行的應用程序(dll,exe等)。 此可運行的應用程序是C#的機器代碼翻譯。 它包括“鏈接”(DLL代表d ynamic 大號墨液L ibrary)至組件。
bin
文件夾 編譯應用程序時,VS中的引用將有兩個選項:
如果copy local
為True
Visual Studio將在構建清單中包含dll。 這基本上意味着dll將最終位於bin
文件夾中。 如果為假,它將不包含它,並且將假定該應用程序將能夠從其他地方引用此程序集。
您的已編譯應用程序將基於層次結構查找程序集。 查找與清單匹配的程序集的第一個位置是bin
文件夾。 正如我們已經指出的,盡管程序集並不總是在這里。
如果在這里找不到它,它將檢查正在運行的計算機,以查看是否可以訪問這些程序集。 它檢查的下一個位置是稱為全局程序集緩存的概念。 這是在機器和組件位置上注冊的組件的寄存器。
如果仍然找不到它,它將拋出異常。
兩個不同版本的程序集鏈接到我的項目中,將考慮哪一個? 都?
不,它不能同時使用。 如注釋中所述,您可以使用alias
來引用特定的程序集,但是每次仍使用一個程序集。
如果您沒有指定alias
,那么我不希望它起作用嗎? 我希望VS抱怨它不知道要使用哪個。 您可以在app.config
/ web.config
配置app.config
的程序集:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
</dependentAssembly>
這會將競爭程序集映射到一個特定版本(通常是最新版本)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.