2017-06-27 22 views
0

編集:既に問題を解決済み!下の私の答えを見てください。Nugetパッケージが破損したweb.configファイルを生成しました(assemblyBindingセクション)

私は作成したナゲットパッケージに奇妙な問題があります。 すでにいくつかのnugetパッケージが作成されていますが、これまでにこの問題は発生していませんでしたが、新しいパッケージをインストールすると突然無効なweb.configファイルが生成されます。

nuspecファイルは、他の(作業中の)プロジェクトとほぼ同じです。私はスクリプトといくつかの特別なコンテンツをインストールし、メタデータセクションに依存関係を設定追加:

<?xml version="1.0"?> 
<package > 
    <metadata> 
    <id>$id$</id> 
    <version>$version$</version> 
    <title>$title$</title> 
    <authors>Kooco.com Ltd</authors> 
    <owners>$author$</owners> 
    <description>Server-Project Template for use with the Kooco.Framework</description> 
    <releaseNotes>Pre-Alpha Release</releaseNotes> 
    <copyright>Copyright 2017</copyright> 
    <tags>Maxima Kooco WebProjects</tags> 
    <dependencies> 
     <dependency id="Newtonsoft.Json" version="10.0" /> 
     <dependency id="AutoMapper" version="6.0" /> 
     <dependency id="WebActivatorEx" version="2.2" /> 
     <dependency id="Kooco.Framework" version="$version$" /> 
    </dependencies> 
    <references> 

    </references> 
    </metadata> 
    <files> 
    <file src="install.ps1" target="tools" /> 
    <file src="NugetOverwriteContents\**\*.*" target="tools\OverwriteContents" /> 
    <file src="NugetNoOverwriteContents\**\*.*" target="tools\NugetNoOverwriteContents" /> 
    </files> 
</package> 

は、依存関係は、他の(作業)パッケージのようにまったく同じです。

しかし、パッケージをインストールする際に、何らかの理由で、nugetがあるため非終了タグの、アプリケーションのエラーにつながる次のweb.configのセクション、生成されます:nugetをインストールする前に、

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" /> 
     <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" /> 
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" /><assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" /><assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /></dependentAssembly> 
    <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-5.2.0.0" newVersion="5.2.0.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
     <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
     <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" /> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

をそれはパッケージでした:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" /> 
     <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" /> 
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" /><assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" /></dependentAssembly> 
    <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-5.2.0.0" newVersion="5.2.0.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
     <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
     <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" /> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

私はカスタム設定変換を行いません。 私はインストールスクリプトを持っていますが、このスクリプトは問題ではありません。私もインストールスクリプトなしでインストールしようとしていて、同じ問題があります。

対象プロジェクトは空のASP.Net Webアプリケーションです。ここでは、 "空"テンプレートを使用していて、 "MVC"と "WebAPI"を有効にしています。

私のnugetパッケージマネージャのバージョンは3.5.0.1484です。自動更新が有効になっています。 私はVisual Studio 2015 Community Editionを使用しています。私のシステムはWindows 10です。

誰かがこの問題の原因を考えていますか?

答えて

0

この問題の原因は何ですか?

nuspecファイルでnugpecパッケージを作成しましたが、<files>... </files>の部分は含まず、ASP.Net MVCプロジェクトにインストールします。それはうまく動作します。だから私はこの問題の詳細な情報なしで直接解決策はありません。あなたにいくつかのトラブルシューティングを提供することができます:

まず、web.configで人為的な変更を除外してください。

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" /> 
     <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

しかし、あなたのweb.configファイルには、パッケージNewtonsoft.Json下bindingRedirectを複製:デフォルトのバインディング情報は、以下のようにする必要があるため

<dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" /> 
     <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" /> 
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" /><assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" /><assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /></dependentAssembly> 

あなたは新しい空白を作成することができますこれをチェックするASP.Net MVCプロジェクト。

第2に、web.configをweb.config.transform fileで変更するか、XMLドキュメントトランスフォーム(XDT)を使用して変更できます。

ウェブ。config.transformファイルにはweb.configファイルと同じものが含まれており、NuGetパッケージをインストールするときにweb.configファイルに適用されます。 XDTはより強力で、既存の要素の挿入や削除など、web.configファイルの複雑な変更を行うことができます。ですから、あなたのパッケージにワイルドカード "*"を含む設定変換ファイルがあるかどうかを再度確認してください。パッケージ内のこれらのファイルを除外して、この問題が引き続き発生するかどうかを調べることができます。

0

問題が見つかりました: 問題は、私のプロジェクトの中にはweb.configファイルにビルドアクションが "Content"に設定されていて、それがnugetパッケージビルダーによって自動的にそれから。 ビルドアクションを「なし」に変更すると、問題が解決しました。

btw。 "NuGet Package Explorer"ツールを使用して作成したナゲットパッケージの内容を見ることができました。ここで、自動的に作成された "web.config.transform"ファイルを見ました。

関連する問題