构建 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 生成其输出的特定方式,因此将来可能会中断。
我有一些 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 生成其输出的特定方式,因此将来可能会中断。