1

デコレータの方法だけで、xml なしで MvcSiteMapNode を使用しています。この投稿で言ったように

空のルート ノードを持つノードが 1 つしかないと確信しています。また、このエラーが発生する場合を除いて、常に機能します。

親キーなしで宣言されたノードが複数あります。親キーは、SiteMap の 1 つのノードを除くすべてのノードに設定する必要があります。親キーのないノードはルート ノードと見なされます。XML でノードを定義する場合、XML ファイルにはルート ノードが含まれている必要があります。

MvcSiteMapProvider_EnableSiteMapFile 設定を "false" に設定することで、XML 構成を無効にすることができます。外部 DI 構成の場合、MvcSiteMapProvider DI モジュールから XmlSiteMapNodeProvider を削除することにより、XML 解析を無効にすることができます。

または、MvcSiteMapProvider_IncludeRootNodeFromSiteMapFile 設定を "false" に設定して、XML ファイルからルート ノードを除外し、他のすべてのノードを含めることができます。外部 DI 構成の場合、この設定は XmlSiteMapNodeProvider のコンストラクターにあります。

SiteMapCacheKey: 'sitemap://localhost/'

あいまいなルート ノード:

親キー: '' | コントローラー: 'ホーム' | アクション: 'インデックス' | エリア: 「管理者」 | URL: '/管理者' | キー: 'ルート' | ソース: 'MvcSiteMapNodeAttribute'

親キー: '' | コントローラー: 'ホーム' | アクション: 'インデックス' | エリア: 「管理者」 | URL: '/管理者' | キー: 'ルート' | ソース: 'MvcSiteMapNodeAttribute'

私のApp.Settings

<add key="MvcSiteMapProvider_EnableSiteMapFile" value="false" />
<add key="MvcSiteMapProvider_IncludeRootNodeFromSiteMapFile" value="false" />
<add key="MvcSiteMapProvider_IncludeAssembliesForScan" value="dllmain,dll2" />
<add key="MvcSiteMapProvider_UseExternalDIContainer" value="false" />
<add key="MvcSiteMapProvider_ScanAssembliesForSiteMapNodes" value="true" />

サイトマップが初期化される方法と関係があると思います。クロススレッド操作に対して脆弱である可能性があります。二重に初期化される可能性があります。

これについて何かアドバイスはありますか?

前もって感謝します。

4

1 に答える 1

0

MvcSiteMapProvider にエリアを設定する方法については、この回答をご覧ください。ルートは、正しい規則を使用して構成する必要があります。そうしないと、正しく機能しません。

親ノードが設定されていない (または null または空の文字列に設定されている) サイト全体に 1 つのノードしかないことが確実であり、[MvcSiteMapNode] 属性を使用している場合、これはアセンブリが読み込まれていることが原因である可能性があります。 AppDomain に複数回。メソッドをチェックしてAppDomain.CurrentDomain.GetAssemblies()、ターゲット アセンブリ (この場合はdllmaindll2) が結果に複数回含まれているかどうかを確認します。

于 2014-03-21T16:37:41.243 に答える