0

MSBuild を使用してカスタム xml 要素を web.config に挿入したいと考えています。オンラインで調べた後、私はそのような解決策を見つけました:

1) projectextensions の .build ファイルに要素を格納します。

<ProjectExtensions>
 <CustomElement name="CustomElementName">
  ...
 </CustomElement>
</ProjectExtensions>

2) GetValue で要素を取得する

<Target name="ModifyConfig">
<XmlFile.GetValue Path="$(MSBuildProjectFullPath)"
               XPath="Project/ProjectExtensions/CustomElement[@name='CustomElementName']">
            <Output TaskParameter="Value" PropertyName="CustomElementProperty"/>
</XmlFile.GetValue>
</Target>

必要な要素を見つけるために.buildプロジェクトが使用している名前空間を参照する必要があるため、これは機能しません(XPath Visualizerで.buildファイルをチェックしました)。だから、私はさらなる解決策を探して、これに来ます:

<ItemGroup>
        <XmlNamespace Include="MSBuild">
            <Prefix>msb</Prefix>
            <Uri>http://schemas.microsoft.com/developer/msbuild/2003</Uri>
        </XmlNamespace>
</ItemGroup>

<Target name="ModifyConfig">
<XmlFile.GetValue Path="$(MSBuildProjectFullPath)" Namespaces="$(XmlNamespace)"
               XPath="/msb:Project/msb:ProjectExtensions/msb:CustomElement[@name='CustomElementName']"
                 >
            <Output TaskParameter="Value" PropertyName="CustomElementProperty"/>
</XmlFile.GetValue>
</Target>

しかし、何らかの理由で名前空間が認識されません。MSBuild は次のエラーを報告します。

C:...\mybuild.build(53,9): error : タスク エラーが発生しました。C:...\mybuild.build(53,9): エラー: メッセージ = 名前空間プレフィックス 'msb' が定義されていません。

私はそれを別の方法で参照するいくつかのバリエーションを試しましたが、どれもうまくいきませんでした.オンラインでもそれらの名前空間を適切に参照することについてはあまりありません. 私が間違っていることと、それを適切に行う方法を教えてもらえますか?

4

1 に答える 1

1

カスタムXML要素をxmlファイルに挿入するために呼び出されるMSBuildCommunityTasksのカスタムタスクを使用することをお勧めします。XmlMassUpdate

<XmlMassUpdate 
ContentFile="web.config" 
SubstitutionsFile="changes.xml" 
ContentRoot="/configuration/system.web" 
SubstitutionsRoot="/system.web" /> 

次のように、プロジェクトファイルでXMLを直接参照することもできます。

<XmlMassUpdate ContentFile="web.config" ContentRoot="/configuration/system.web"
    NamespaceDefinitions="msb=http://schemas.microsoft.com/developer/msbuild/2003"
    SubstitutionsFile="$(MSBuildProjectFullPath)"
    SubstitutionsRoot="/msb:Project/msb:ProjectExtensions/msb:system.web" />

ただし、質問のタイルは、XML値を変更せずに最初に取得する際に問題があることを示唆しているようです。前述のlibにはXmlQuery、XMLファイルから値を読み取り、それらの値に基づいてパラメーターを設定するタスクもあります。

于 2010-03-29T09:03:22.530 に答える