有没有一种方法可以在C#中的构建时检查缺少的程序集?

时间:2019-12-12 16:31:24

标签: c# .net dll

类似的问题:

  1. The located assembly's manifest definition does not match the assembly reference

假设我们有一个基本的.NET Standard库,该库引用了从Nuget获得的外部DLL,例如System.Data.SqlClient

一个类依赖于外部DLL来起作用:

namespace BasicLibrary
{
    public class Class1
    {

        public void Method() 
        {
            var foo = new System.Data.Sql.SqlNotificationRequest();
        }
    }
}

我们现在建立针对.NET Standard 2.0的库。

这样做之后,我们创建了一个示例控制台应用程序(.NET Core 3.0),并添加了对我们先前构建的库的引用。

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            var bar = new BasicLibrary.Class1();
            bar.Method();
        }
    }
}

代码构建良好,但可以预期的是,由于缺少对System.Data.SqlClient的引用,它崩溃了

System.IO.FileNotFoundException: 'Could not load file or assembly 'System.Data.SqlClient, Version=4.6.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

有没有一种方法可以在构建时检查缺少的程序集?

1 个答案:

答案 0 :(得分:-1)

您可以创建将为您完成此任务的目标。如下所示(它会检查NUGET包,在您的情况下,将检查其他路径和库):

<Target Name="EnsureRequiredLibrariesExists" BeforeTargets="PreBuild">
    <PropertyGroup>
      <!--<ErrorText>YOUR CUSTOM ERROR MESSAGE</ErrorText>-->
      <ErrorText>Please include required dlls</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.1.1.1\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.1.1.1\build\Microsoft.Net.Compilers.props'))" />    
</Target>

也是

  • 请参阅此link
  • ,并且如here所述,在文本编辑器中浏览项目,并在其中查找带有标签的引用。像是对还是错。 “私人”是“复制本地”的同义词。