我们如何使用WinRM更新web.config文件-IIS Web App部署任务

时间:2019-07-24 00:52:29

标签: c# azure-devops azure-pipelines azure-pipelines-release-pipeline winrm

使用Azure DevOps版本管道中的 WinRM-IIS Web应用程序部署任务在本地IIS服务器上部署应用程序时,有什么方法可以更新web.config文件。

下面是问题说明。

  • 我在源代码管理(AzureDevops存储库)中存在Asp.net应用程序
  • 我想更新Web.config文件以进行数据库连接,外部第三方URL等

  • 我想使用During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:/Users/admin/PycharmProjects/Cylinder/OpenHeader-dicom.py", line 15, in <module> ds.save_as(filename_little_endian) File "C:\ProgramData\Anaconda3\lib\site-packages\pydicom\dataset.py", line 1108, in save_as pydicom.dcmwrite(filename, self, write_like_original) File "C:\ProgramData\Anaconda3\lib\site-packages\pydicom\filewriter.py", line 888, in dcmwrite write_dataset(fp, get_item(dataset, slice(0x00010000, None))) File "C:\ProgramData\Anaconda3\lib\site-packages\pydicom\filewriter.py", line 521, in write_dataset write_data_element(fp, dataset.get_item(tag), dataset_encoding) File "C:\ProgramData\Anaconda3\lib\contextlib.py", line 130, in __exit__ self.gen.throw(type, value, traceback) File "C:\ProgramData\Anaconda3\lib\site-packages\pydicom\tag.py", line 37, in tag_in_exception raise type(ex)(msg) LookupError: With tag (0010, 0010) got exception: unknown encoding: ISO_IR 149 Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\site-packages\pydicom\tag.py", line 30, in tag_in_exception yield File "C:\ProgramData\Anaconda3\lib\site-packages\pydicom\filewriter.py", line 521, in write_dataset write_data_element(fp, dataset.get_item(tag), dataset_encoding) File "C:\ProgramData\Anaconda3\lib\site-packages\pydicom\filewriter.py", line 464, in write_data_element writer_function(buffer, data_element, encodings=encodings) File "C:\ProgramData\Anaconda3\lib\site-packages\pydicom\filewriter.py", line 264, in write_PN val = [elem.encode(encodings) for elem in val] File "C:\ProgramData\Anaconda3\lib\site-packages\pydicom\filewriter.py", line 264, in <listcomp> val = [elem.encode(encodings) for elem in val] File "C:\ProgramData\Anaconda3\lib\site-packages\pydicom\valuerep.py", line 763, in encode return _encode_personname(self.components, encodings) File "C:\ProgramData\Anaconda3\lib\site-packages\pydicom\valuerep.py", line 594, in _encode_personname for group in comp.split('^')] File "C:\ProgramData\Anaconda3\lib\site-packages\pydicom\valuerep.py", line 594, in <listcomp> for group in comp.split('^')] File "C:\ProgramData\Anaconda3\lib\site-packages\pydicom\charset.py", line 274, in encode_string encoded = value.encode(encoding) LookupError: unknown encoding: ISO_IR 149 任务

  • 执行相同的操作

我理想地知道,可以使用AzureDevops市场中存在的其他任务(例如WinRM - IIS Web App Deployment任务)来完成此操作。

首先我要检查这是否可行

我们可以使用Update Config任务中可用的Web Deploy Parameter FileOverride Parameters选项来实现它。

ReleasePipeline

该任务的日志如下:

WinRM - IIS Web App Deployment

3 个答案:

答案 0 :(得分:2)

  

我们可以使用Web Deploy参数文件和替代来实现它吗?   WinRM-IIS Web App中可用的参数选项   部署任务。

我认为可以。正如Sayki所说,它将用于.xml文件。您可以先生成一个SetParameters.xml,然后将此SetParameters.xml添加到Web Deploy Parameter File中以执行所需的操作。

例如,假设您的web.config文件具有以下格式:

<connectionStrings>
    <add name="DefaultConnection" connectionString="<string1>"
      providerName="<SqlClient Name>" />
 </connectionStrings>

SetParameters.xml中,您可以参考以下格式:

<?xml version="1.0" encoding="utf-8"?>
    <parameters>
      <setParameter name="DefaultConnection" value="<string2>" />
</parameters>

有关任务的配置:

enter image description here

此时,DefaultConnection将是<string2>

答案 1 :(得分:1)

Web部署参数文件替代参数是用于HasFieldNames = False dir_List = "C:\Users\LVWis\dump\UnzippedFiles\" Directory = Dir(Dir_List) If Len(Directory) > 0 Then Do FileName = "C:\Users\LVWis\dump\UnzippedFiles\" & Directory endFileName = Right(Trim(FileName), 5) beginFileName = Left(Trim(FileName), 3) If endFileName = "1.csv" And beginFileName = "BAS" Then strTable = "BAS_1" DoCmd.TransferText acImportDelim, "BAS_1a", strTable, FileName, HasFieldNames strPathFile = Dir() ElseIf endFileName = "2.csv" And beginFileName = "BAS" Then strTable = "BAS_2" DoCmd.TransferText acImportDelim, "BAS_2a", strTable, FileName, HasFieldNames strPathFile = Dir() ElseIf endFileName = "3.csv" And beginFileName = "BAS" Then strTable = "BAS_3" DoCmd.TransferText acImportDelim, "BAS_3a", strTable, FileName, HasFieldNames strPathFile = Dir() ElseIf endFileName = "4.csv" And beginFileName = "BAS" Then strTable = "BAS_4" DoCmd.TransferText acImportDelim, "BAS_4a", strTable, FileName, HasFieldNames strPathFile = Dir() ElseIf endFileName = "5.csv" And beginFileName = "BAS" Then strTable = "BAS_5" DoCmd.TransferText acImportDelim, "BAS_5a", strTable, FileName, HasFieldNames strPathFile = Dir() End If Directory = Dir Loop Until Len(Directory) = 0 End If 参数文件的,这些文件可在IIS中用于配置设置。因此您需要使用参数创建一个.xml文件,然后可以在任务中覆盖它们。

如果您想使用.xml,也可以使用web.config文件来完成,但是有点复杂,请参见here。之后,您可以在任务中使用Override。

我建议使用.xml转换任务,而不要使用web.config选项(这是旧方法...)。

答案 2 :(得分:1)

您可以通过在“替代参数”中指定它们来替代参数值。例如:

Web.config:

<connectionStrings>
    <add name="DefaultConnection" connectionString="old string" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    <add key="email" value="default@example.com"/>
    <add key="url" value="example.com"/>
  </appSettings>

Parameters.xml:

<?xml version="1.0" encoding="utf-8" ?>
<parameters>
  <parameter name="email" description="description"> 
    <parameterEntry kind="XmlFile"
                    scope="\\web.config$"
                    match="/configuration/appSettings/add[@key='email']/@value" />
  </parameter>
  <parameter name="url" description="description">
    <parameterEntry kind="XmlFile"
                    scope="\\web.config$"
                    match="/configuration/appSettings/add[@key='url']/@value" />
  </parameter>
</parameters>

在构建过程中创建MSDeploy程序包(Visual Studio Build / MSBuild任务):

enter image description here

/p:SkipInvalidConfigurations=true /p:DeployOnBuild=true  /p:WebPublishMethod=Package /p:PackageLocation="$(build.artifactstagingdirectory)" /P:PackageTempRootDir=""

然后,它将生成以下文件:

enter image description here

xx.SetParameters.xml的内容:

<?xml version="1.0" encoding="UTF-8"?>

<parameters>

<setParameter value="" name="email"/>

<setParameter value="" name="url"/>

<setParameter value="Data Source=old string" name="DefaultConnection-Web.config Connection String"/>

</parameters>

覆盖WinRM-IIS Web App部署任务的参数:

enter image description here

name="DefaultConnection-Web.config Connection String",value="new connectionstring"
name="email",value="newmail@xx.com"
name="url",value="newurl"