我创建了三个项目如下:
ConsoleApp(控制台应用程序)
ProjectReference(类库)
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 扩展了引用节点,以查看我的两个引用的属性,它们完全相同。如果没有按照我命名的方式,我也无法告诉哪一个是项目参考,哪一个是二进制。
问题
这让我对这两件事感到疑惑:
有没有办法告诉对方?
如果两个参考目标都在同一个解决方案中,这是否很重要?当您在Visual Studio中构建解决方案时,它们都会以正确的顺序构建。
即使我想要一个自定义构建序列并想要为此构建一个MS Build脚本而不是让Visual Studio构建它,它仍然没有区别,因为引用的项目必须首先构建,因为它们是 ConsoleApp 项目的依赖关系?
一个比另一个好吗?我曾经认为项目参考更好但是现在,我正在挑战我通过批评性地检查它们所持有的一些信念。
如果 BinaryReference 不是解决方案中的项目而是另一个解决方案中的项目(但不是我从未有过的源代码,那可能会有所不同,因为那时不是一个有争议的问题;我们参考的每个微软或第三方程序集都有这个问题吗?在这种情况下,它需要我打开其他解决方案,该解决方案具有 BinaryReference 作为项目参考,并在返回构建此之前构建该解决方案 BinaryReference 是二进制引用的解决方案。
即使我已经编程了多年,我提出所有这些问题的原因是因为我正在寻找一个大型企业项目,其中包含大量项目的解决方案,而且一些参考文献是可疑的二进制项目而不是项目。棘手的部分是:项目名称与它们生成的程序集名称不同。
答案 0 :(得分: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 :(得分:0)
无论是从项目加载引用还是从二进制文件加载引用,它们都由文件路径加载。除了在构建解决方案之外从项目或二进制文件加载时,它不会有任何不同,您知道依赖程序集也是在此时构建的。
我参与了一个企业项目(50个或更多解决方案和200多个项目),它的设置方式是拥有一个内部块金服务器,并将每个项目的最新版本放在此服务器上。因此,当另一个项目引用程序集时,它会查看此本地块金服务器并在需要时获取最新的程序集文件。