构建 BIML 时是否可以获取包含 BIML 源文件的目录路径

When building BIML is it possible to get path of the directory containing the BIML source files

我有一些 BIML 可以根据某些配置文件中的数据生成 SSIS 包。

我在 BIML 中有 C# 代码来读取配置文件并在构建 SSIS 包时使用其中的数据。

但是,我目前必须在我的 C# 中对配置文件的路径进行硬编码。我更愿意使用 BIML 文件中的相对路径。这可能吗? (或者有更简单的方法吗?)

所有内容都在一个 BIML 文件中的最小示例(实际上我有单独的 C# 文件):

<Biml xmlns="http://schemas.varigence.com/biml.xsd">

<#
// I would like a directory path to any of my BIML or C# files here.
var CodeBase = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase;
var BaseDirectory = System.AppDomain.CurrentDomain.BaseDirectory;
var CurrentDirectory = Environment.CurrentDirectory;
var GetCurrentDirectory = System.IO.Directory.GetCurrentDirectory();
var GetFullPath = System.IO.Path.GetFullPath(".");
#>

    <Packages>
        <Package Name="Demo_paths" ConstraintMode="Linear">
            <Variables>
                <Variable Name="CodeBase" DataType="String" IncludeInDebugDump="Exclude" EvaluateAsExpression="false">
                  <#=CodeBase#>
                </Variable>
                <Variable Name="BaseDirectory" DataType="String" IncludeInDebugDump="Exclude" EvaluateAsExpression="false">
                  <#=BaseDirectory#>
                </Variable>
                <Variable Name="CurrentDirectory" DataType="String" IncludeInDebugDump="Exclude" EvaluateAsExpression="false">
                  <#=CurrentDirectory#>
                </Variable>
                <Variable Name="GetCurrentDirectory" DataType="String" IncludeInDebugDump="Exclude" EvaluateAsExpression="false">
                  <#=GetCurrentDirectory#>
                </Variable>
                <Variable Name="GetFullPath" DataType="String" IncludeInDebugDump="Exclude" EvaluateAsExpression="false">
                  <#=GetFullPath#>
                </Variable>
            </Variables>
        </Package>
    </Packages>
</Biml>

我也试过 RootNode.BimlFile 但这在最小复制中不起作用,而且似乎只给出了文件的文件名,而不是它在磁盘上的路径。

上面的变量有以下值

基本目录:

C:\Program Files (x86)\Microsoft Visual Studio17\Professional\Common7\IDE\

代码库:

file:///C:/Users/<用户名>/AppData/Local/Temp/Varigence/230028/4pxczy3m.dll

当前目录:

C:\Program Files (x86)\Microsoft Visual Studio17\Professional\Common7\IDE

获取当前目录:

C:\Program Files (x86)\Microsoft Visual Studio17\Professional\Common7\IDE

获取完整路径:

C:\Program Files (x86)\Microsoft Visual Studio17\Professional\Common7\IDE

因此,在 BimlExpress 中有效的一种方法是使用

Host.TemplateFile

尽管这似乎确实取决于 BIML 生成其输出的特定方式,因此将来可能会中断。