C# 有没有办法判断一个项目是引用解决方案中的另一个项目,还是仅引用其二进制文件?
我创建了以下三个项目:C# 有没有办法判断一个项目是引用解决方案中的另一个项目,还是仅引用其二进制文件?,c#,.net,visual-studio,C#,.net,Visual Studio,我创建了以下三个项目: ConsoleApp(控制台应用程序) ProjectReference(类库) 二进制引用(类库) 对于上面提到的每个类库,我添加了一个类,如下所示: 项目参考 namespace ProjectReference { public class Class1 { public string Property1 = "Property 1 from project reference."; } } namespace BinaryReference
namespace ProjectReference
{
public class Class1
{
public string Property1 = "Property 1 from project reference.";
}
}
namespace BinaryReference
{
public class Class1
{
public string Property1 = "Property 1 from binary reference.";
}
}
二进制引用
namespace ProjectReference
{
public class Class1
{
public string Property1 = "Property 1 from project reference.";
}
}
namespace BinaryReference
{
public class Class1
{
public string Property1 = "Property 1 from binary reference.";
}
}
然后,在ConsoleApp项目中,我单击了添加引用,并从解决方案->项目选项卡中选择了项目引用类库项目
然后我再次单击ConsoleApp项目中的添加引用,这次从浏览选项卡中,我为二进制引用类库项目选择了二进制文件
接下来,我构建解决方案。我扩展了ConsoleApp的References节点,以查看我的两个引用的属性,它们看起来完全相同。如果不是因为我给它们命名的方式,我不可能分辨出哪一个是项目引用,哪一个是二进制文件
问题
这让我想知道这两件事:
尽管我已经编程多年了,但我之所以提出所有这些问题,是因为我在看一个大型企业项目,解决方案中有无数个项目,其中一些参考文献是可疑的二进制文件,而不是项目文件。棘手的部分是:项目名称与它们生成的程序集的名称不同。可以通过检查特定项目的
*.csproj
文件(一个Xml文件)来辨别差异。二进制引用使用引用
节点,如下所示
<Reference Include="{some info}">
<SpecificVersion>{some value}</SpecificVersion>
<HintPath>{some path}</HintPath>
<Private>{some value}</Private>
</Reference>
<ProjectReference Include="{some path}">
<Project>{some guid}</Project>
<Name>{some name}</Name>
</ProjectReference>
无论是从project还是从binary加载引用,它们都是通过文件路径加载的。无论是从项目还是从二进制文件加载,都不会有任何不同,除非在生成解决方案时,您知道依赖程序集也在生成
我曾参与过一个企业项目(50个或更多的解决方案和200多个项目),其设置方式是拥有一个内部nugget服务器,并将每个项目的最新版本放在该服务器上。因此,当另一个项目引用某个程序集时,它会查看此本地nugget服务器,并在需要时获取可用的最新程序集文件。。。。为什么您关心大型项目中的一些是引用,而另一些是二进制文件?引用松散的DLL已经成为过去。将它们包装在NuGet包中并部署到NuGet服务器,以便您可以管理版本依赖关系。如果它在同一个解决方案中,那么可以进行项目引用。相关:“Visual Studio 2015在同一个解决方案中加载其项目时不再使用对库的二进制引用”@Damien_the_unsiver谢谢。我忘了提到,对于这台特殊的机器,我使用的是VS 2013,但谢谢。这是一篇非常相关的文章。没有直接的关系,但我浪费了一些时间,直到我发现并非MSBuild的所有功能都可以在VisualStudioIDE中访问。