跳转至

在构建脚本中引用外部程序集

在构建脚本中引用外部程序集

FlubuCore 会自动从构建脚本的 csproj 文件中加载所有程序集引用(assemblies references)和 nuget 包。csproj 文件必须位于指定位置。如果不是程序集引用和 nuget 引用的话,FlubuCore 就不会在执行时自动加载它们。

Note

你可以在构建脚本中通过添加特性(attribute)的方式禁用引用程序集和 nuget 包。

1
2
3
4
[DisableLoadScriptReferencesAutomatically]
public class BuildScript : DefaultBuildScript
{
}

或者,当你运行无 csproj 的脚本(比如部署脚本)时,外部引用(external references)可以通过三种方式用指令来添加:

通过程序集的相对路径或完整路径

在构建脚本类上,你得添加特性(attribute):

1
2
3
4
5
6
7
8
[Assembly(@".\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll")]
public class BuildScript : DefaultBuildScript
{
    public void ReferencedAssemlby(ITaskContext context)
    {
       JsonConvert.SerializeObject("Example");
    }
}

FlubuCore 还可以从指定的目录价在所有程序集,也可以从其子目录(subdirectories)中加载

1
2
3
4
[AssemblyFromDirectory(@".\Packages", true)]
public class BuildScript : DefaultBuildScript
{
}

引用 NuGet 包

Flubu 支持引用 NuGet 包。如果你想引用 NuGet 包,你必须先安装 .NET Core SDK 或 msbuild,否则它们(NuGet 包)将无法还原(restore)。

你必须在脚本的类上添加 NuGetPackage 特性:

1
2
3
4
5
6
7
8
[NugetPackage("Newtonsoftjson", "11.0.2")]
public class BuildScript : DefaultBuildScript
{
    public void ReferencedNugetPackage(ITaskContext context)
    {
       JsonConvert.SerializeObject("Example");
    }
}

按程序集名称加载

FlubuCore 可以通过完全限定程序集名(fully qualifed assemlby name)的方式加载系统程序集(system assemblies)。

逆序比在脚本类上添加 Reference 特性(attribute):

1
2
3
4
5
6
7
8
[Reference("System.Xml.XmlDocument, System.Xml, Version=4.0.0.0, Culture=neutral, publicKeyToken=b77a5c561934e089")]
public class BuildScript : DefaultBuildScript
{
    public void ReferencedAssemlby(ITaskContext context)
    {
        XmlDocument xml = new XmlDocument();
    }
}

获取完全限定程序集名(fully qualifed assembly name)的一种方式:

1
var fullQualifedAssemblyName = typeof(XmlDocument).Assembly.FullName;

从目录中加载所有程序集

即便你没有将脚本与 csproj 一道使用,FlubuCore 也可以从目录中自动加载所有外部程序集(external assemblies)(子目录(subdirectories)中的程序集也可以选择一并被加载)。

默认情况下,FlubuCore 会从 FlubuLib 目录下加载所有程序集。只要在 flubu runner 所在的位置下创建目录,并将程序集刚在该目录之中。你也可以在 flubu runner 中指明从那个目录加载程序集:

flubu.exe -ass=somedirectory

dotnet flubu -ass=somedirectory

或者你可以通过给 flubusettings.json 文件的 ass 设置一个值:

1
2
3
4
{
  "ass" : "someDirectory",
  "SomeOtherKey" : "SomeOtherValue"
}`

将其它 .cs 文件加到脚本中

其它 .cs 文件必须先添加特性(attribute),它们不会被自动地从构建脚本的项目文件中加载。除非已经自动加载过构建脚本的基类或部分类。

1
2
3
4
5
6
7
8
[Include(@".\BuildHelper.cs")]
public class BuildScript : DefaultBuildScript
{
    public void Example(ITaskContext context)
    {
        BuildHelper.SomeMethod();
    }
}

FlubuCore 还可以从指定的目录中加载所有的 .cs 文件到脚本中(也可以选择将该目录下的子文件夹中的 .cs 文件一并加载)。

1
2
3
4
[IncludeFromDirectory(@".\Helpers", true)]
public class BuildScript : DefaultBuildScript
{
}