有没有办法判断项目是否从解决方案或其二进制文件中引用了另一个项目?

时间:2017-04-10 13:41:48

标签: c# .net visual-studio

我创建了三个项目如下:

  1. ConsoleApp(控制台应用程序)

  2. ProjectReference(类库)

  3. BinaryReference(类库)

  4. 对于上面提到的每个类库,我添加了一个类,如下所示:

    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中构建解决方案时,它们都会以正确的顺序构建。

    3. 即使我想要一个自定义构建序列并想要为此构建一个MS Build脚本而不是让Visual Studio构建它,它仍然没有区别,因为引用的项目必须首先构建,因为它们是 ConsoleApp 项目的依赖关系?

      1. 一个比另一个好吗?我曾经认为项目参考更好但是现在,我正在挑战我通过批评性地检查它们所持有的一些信念。

      2. 如果 BinaryReference 不是解决方案中的项目而是另一个解决方案中的项目(但不是我从未有过的源代码,那可能会有所不同,因为那时不是一个有争议的问题;我们参考的每个微软或第三方程序集都有这个问题吗?在这种情况下,它需要我打开其他解决方案,该解决方案具有 BinaryReference 作为项目参考,并在返回构建之前构建该解决方案 BinaryReference 是二进制引用的解决方案。

      3. 即使我已经编程了多年,我提出所有这些问题的原因是因为我正在寻找一个大型企业项目,其中包含大量项目的解决方案,而且一些参考文献是可疑的二进制项目而不是项目。棘手的部分是:项目名称与它们生成的程序集名称不同。

2 个答案:

答案 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多个项目),它的设置方式是拥有一个内部块金服务器,并将每个项目的最新版本放在此服务器上。因此,当另一个项目引用程序集时,它会查看此本地块金服务器并在需要时获取最新的程序集文件。