c# - 如何从 .t​​t 文件(T4 模板)的 web.config 中读取 appSetting

标签 c# asp.net code-generation t4

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

我的 .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"] #>';

.....

当我尝试从 .tt 文件生成 .ts 文件时,我收到以下错误消息:

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  

最佳答案

我采用了假装该文件是 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" #>

所以这是我的尝试:

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();
}

关于c# - 如何从 .t​​t 文件(T4 模板)的 web.config 中读取 appSetting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46419234/

相关文章:

c# - 与 C# 相比,C++ 中的构造函数和析构函数

asp.net - 在 IIS7 经典模式下,cs 用户名未显示在 IIS 日志中

scala - 处理宏注释时无法访问父级成员

c# - 将不确定数量的子句动态添加到 Linq 2 Sql 查询的正确方法是什么?

c# - 选择要在 Visual Studio 2010 中调试或运行的解决方案下的项目

c# - 如何使用过滤器 HostAuthenticationFilter 修改 "Authorization has been denied for this request."

c# - 使用安装在 IIS 上的 URL Rewrite 配置 Web API

asp.net - WCF服务支持文件jsdebug加载失败

c# - 在 C# 中生成 JavaScript 和后续测试

java - 在 Eclipse 中从 XML 生成 Java 代码