0

Devart dll st をパッケージ化する目的でカスタム nuget パッケージを作成したところです。すべてのプロジェクトで適切なバージョン管理と更新メカニズムが導入されています。

Nuget パッケージの構造は、公式 wikiの指示に従っており、次のようになります。

  • デバートオラクル
    • コンテンツ
      • web.config.transform
    • ライブラリ
      • Devart.Data.Oracle.dll
      • ...
    • DevartOracle.nuspec

nuspec ファイルの内容は、ほぼ次のとおりです。

<?xml version="1.0"?>
<package >
  <metadata>
    <id>DevartOracle</id>
    <version>6.70.311-pre6</version>
    <title>Devart Oracle dotConnect</title>
    ...
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Drivers from Devart for Oracle and Entity Framework</description>
    <releaseNotes></releaseNotes>
    <copyright>Copyright 2012</copyright>
    <tags></tags>
    <dependencies>
    </dependencies>
  </metadata>
</package>

実際には特別なことは何もありません。次のコマンドを使用して、nuget パッケージをローカル リポジトリに公開します。

nuget pack DevartOracle.nuspec

dll のインストールは問題ありませんが、web.config マージも作成したいと考えていました。そこで、ドキュメントで指定されているように web.config.transform ファイルを追加しました...再び次の内容で:

 <?xml version="1.0" encoding="utf-8"?>
  <configuration>
    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="Devart.Data.Oracle" publicKeyToken="09af7300eec23701" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-6.70.311.0" newVersion="6.70.311.0" />
        </dependentAssembly>
      </assemblyBinding>
    </runtime>
    <system.data>
      <DbProviderFactories>
        <remove invariant="Devart.Data.Oracle" />
        <add name="dotConnect for Oracle" invariant="Devart.Data.Oracle" description="Devart dotConnect for Oracle" type="Devart.Data.Oracle.OracleProviderFactory, Devart.Data.Oracle, Version=6.70.311.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
      </DbProviderFactories>
    </system.data>
  </configuration>

問題

存在しないか空の<assemblyBinding>セクションで web.config へのマージを実行すると、すべてが期待どおりに機能しますが、たとえば、次のコンテンツが既に存在する場合:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

マージの結果はこの奇妙なものです:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
      <assemblyIdentity name="Devart.Data.Oracle" publicKeyToken="09af7300eec23701" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-6.70.311.0" newVersion="6.70.311.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

何か案は??


アップデート:

Microsoft の従業員とアクティブな NuGet 開発者が Twitter に更新を投稿しました

4

1 に答える 1

2

設計上、NuGetは既存のXMLファイルに変更を追加することのみを許可します(マージするファイルの名前が{filename}。{extension}の規則を使用している限り、マージはXMLタイプのすべてのファイルに対して機能します。変身)。

これは、NuGetがパッケージのインストールによって行われた変更もアンインストールできる必要があるためです(インストール後に変更されたファイルに手動で変更を加えた場合を除きます。この場合、NuGetはアンインストール時にファイルを変更しません)。

これは、おそらくここで混乱を引き起こしているXMLConfigTransformsに期待するものとは大きく異なります。

ターゲットファイルで実際の変換が必要な場合は、PowerShellルートを使用して、パッケージのツールフォルダー内のinstall.ps1ファイルとuninstall.ps1ファイルをスクリプト化する必要があります。

于 2012-11-07T21:04:27.787 に答える