[英]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.