使用Azure DevOps版本管道中的 WinRM-IIS Web应用程序部署任务在本地IIS服务器上部署应用程序时,有什么方法可以更新web.config文件。
下面是问题说明。
我想更新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 File
和Override Parameters
选项来实现它。
该任务的日志如下:
WinRM - IIS Web App Deployment
答案 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>
有关任务的配置:
此时,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任务):
/p:SkipInvalidConfigurations=true /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageLocation="$(build.artifactstagingdirectory)" /P:PackageTempRootDir=""
然后,它将生成以下文件:
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部署任务的参数:
name="DefaultConnection-Web.config Connection String",value="new connectionstring"
name="email",value="newmail@xx.com"
name="url",value="newurl"