代码之家  ›  专栏  ›  技术社区  ›  user230910

如何从web读取应用程序设置。从中配置。tt文件(T4模板)

  •  1
  • user230910  · 技术社区  · 7 年前

    我正在尝试在web中提供URL。编译之前生成系统将更新的配置文件。我的web项目上的tt文件。

    来自我的相关章节。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"] #>';
    
    .....
    

    当我尝试生成时。来自的ts文件。tt文件我收到以下错误消息:

    Severity    Code    Description Project File    Line    Suppression State
    Error       An expression block evaluated as Null
    System.ArgumentNullException: Value cannot be null.
    Parameter name: objectToConvert
       at Microsoft.VisualStudio.TextTemplating.ToStringHelper.ToStringWithCulture(Object objectToConvert)
       at Microsoft.VisualStudio.TextTemplatingF553823B88CD6076D80EB08F6EA809752D0E5DC3E61C0FA53FB2F9AC22ACABF3B7BB9C8801A54E5DBC2A556C03FA42F2EA2AFCE58B708BEC94B0968193987868.GeneratedTextTransformation.TransformText() in webservicecommunicator.service.tt:line 35    Dashboard   webservicecommunicator.service.tt   35  
    
    3 回复  |  直到 7 年前
        1
  •  4
  •   user230910    7 年前

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

    首先是依赖性:

    <#@ 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" #>
    

    string GetWebServiceUrl() {
        XmlDocument doc = new XmlDocument();
        string absolutePath = this.Host.ResolvePath("../../../web.config");                
        doc.Load(absolutePath);
        XmlNode node = doc.DocumentElement.SelectSingleNode("/configuration/appSettings/add[@key='ServerServiceURL']");
        return node.Attributes["value"].Value.ToString();
    }
    
        2
  •  1
  •   Reddog    7 年前

    你可以试着使用 ConfigurationManager.OpenExeConfiguration(path) 方法打开硬编码路径(不确定是否可以执行相对路径)。此时,您可以使用返回的 Configuration 对象自己的 AppSettings 所有物

        3
  •  1
  •   Rickchip    6 年前

    <#@ 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
    #>