C# 如何从.tt文件(T4模板)的web.config读取应用程序设置

C# 如何从.tt文件(T4模板)的web.config读取应用程序设置,c#,asp.net,code-generation,t4,C#,Asp.net,Code Generation,T4,我试图在web.config文件中提供一个URL,生成系统将在编译web项目中的.tt文件之前更新该URL my.tt文件的相关部分如下: <#@ template debug="true" hostSpecific="true" language="C#" #> <#@ output extension=".ts" #> <#@ Assembly Name="System.Core.dll" #> <#@ Assembly Name="System.C

我试图在web.config文件中提供一个URL,生成系统将在编译web项目中的.tt文件之前更新该URL

my.tt文件的相关部分如下:

<#@ template debug="true" hostSpecific="true" language="C#" #>
<#@ output extension=".ts" #>
<#@ Assembly Name="System.Core.dll" #>
<#@ Assembly Name="System.Configuration.dll" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Configuration" #>
<#@ import namespace="System.Collections.Specialized" #>

import { Injectable } from "@angular/core";

<#= RegisterNameSpace("Server.Web.Dashboard.Models.APIRequest") #>
<#= RegisterNameSpace("Server.Web.Dashboard.Models.APIResponse") #>
<#= RegisterNameSpace("Server.Web.Dashboard.Models.APIGeneric") #>
<#= RegisterNameSpace("Server.Data.POCODataObjects") #>

@Injectable()
export class WebServiceCommunicatorService {

    rootUrl : string = '<#= ConfigurationManager.AppSettings["ServerServiceURL"] #>';

.....

您可以尝试使用该方法打开硬编码路径(不确定是否可以执行相对路径)。此时,您可以使用返回的
配置
对象自己的属性。

您可以尝试使用该方法打开硬编码路径(不确定是否可以执行相对路径)。此时,您可以使用返回的
配置
对象自己的属性。

我采用了假装文件是XML文件而不是配置文件的方法。首先,我找到web.config的绝对路径,然后加载它并读取节点

首先是依赖性:

<#@ Assembly Name="System.Web.dll" #>
<#@ Assembly Name="System.Configuration.dll" #>
<#@ assembly name="System.Xml" #>

<#@ import namespace="System.Configuration" #>
<#@ import namespace="System.Web.Configuration" #>
<#@ import namespace="System.Collections.Specialized" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.IO" #>

我采用了假装文件是XML文件而不是配置文件的方法。首先,我找到web.config的绝对路径,然后加载它并读取节点

首先是依赖性:

<#@ Assembly Name="System.Web.dll" #>
<#@ Assembly Name="System.Configuration.dll" #>
<#@ assembly name="System.Xml" #>

<#@ import namespace="System.Configuration" #>
<#@ import namespace="System.Web.Configuration" #>
<#@ import namespace="System.Collections.Specialized" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.IO" #>

添加System.Configuration程序集并将其导入模板文件,如下所示。这将允许您使用ConfigurationManager引用AppSettings

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="System.Configuration" #>
<#@ import namespace="System.Configuration" #>

<#
    var myVariable = ConfigurationManager.AppSettings["MyConfigSetting"];

    ... more code here
#>

添加System.Configuration程序集并将其导入模板文件,如下所示。这将允许您使用ConfigurationManager引用AppSettings

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="System.Configuration" #>
<#@ import namespace="System.Configuration" #>

<#
    var myVariable = ConfigurationManager.AppSettings["MyConfigSetting"];

    ... more code here
#>


到目前为止,我已经找到了web.config的路径:string absolutePath=this.Host.ResolvePath(“../../../web.config”);我尝试了您的解决方案,但它不起作用,我认为允许它查找的位置有一些限制,当前目录位于C:\ProgramFiles中,到目前为止我已设法找到web.config的路径:string absolutePath=this.Host.ResolvePath(../../../web.config”);我尝试了你的解决方案,但它不起作用,我认为它可以查看的位置有一些限制,当前目录在C:\ProgramFiles中,我认为这两个答案的组合可能是正确的解决方案?有时任何有效的方法都可能是正确的解决方案:)是的,由于访问保护级别,当我将其作为配置文件打开时,无法访问它。但是XmlDocument的东西起了作用。我认为这两个答案的组合可能是正确的解决方案?有时,任何可行的方法都可能是正确的解决方案:)是的,当我将其作为配置文件打开时,由于访问保护级别,我无法访问它。但是XmlDocument的东西起作用了。虽然这段代码可以回答这个问题,但提供关于这段代码为什么和/或如何回答这个问题的附加上下文可以提高它的长期价值。@AlexRiabov我已经更新了我的答案。让我知道这是否足够。虽然此代码可以回答问题,但提供有关此代码为什么和/或如何回答问题的其他上下文可以提高其长期价值。@AlexRiabov我已更新了我的答案。让我知道这是否足够。