11

アセンブリ内にクラスとしてサーバー コントロールがありますMySite(つまり、サイトのプロジェクトには aspx ファイルだけでなく、それらの aspx ファイルが参照するサーバー コントロールも含まれています)。aspx ファイル内で次のコードを使用します。

<%@ Register Assembly="MySite" Namespace="MySite.misc" TagPrefix="TAC" %>
...
<TAC:CustomACM ID="myID" runat="server" />

クラスのコードは次のとおりです。

namespace MySite.misc
{
    public class CustomACM : AutoCompleteExtender, INamingContainer
    {
        //...
    }
}

サイトは機能し、完全にコンパイルされますが、IntelliSense は myID の子の中で壊れます。クラスと register ディレクティブの両方の名前空間を変更してMySiteSC.miscこれを修正しますが、使用MySite.miscSCしても役に立ちません。私のソリューション内の他の場所でも使用されておらず、名前空間内に他のMySiteSCクラスは存在しません。miscSCCustomACM

ReSharper は、「MySite」(つまり、レジスタ ディレクティブ内の名前空間の一部)に赤で下線を引き、「レジスタ ディレクティブは使用されておらず、安全に削除できます \n あいまいな参照」というツールチップが表示されます。ReSharper を無効にすると、このエラーは表示されなくなりますが、問題は解決しません。

CustomACM コントロールの名前空間を変更せずに (および CustomACM コントロールを別のアセンブリに移動せずに)、この問題を解決することはできますか?

4

4 に答える 4

5

Resharper はここでバグがあります。この問題は、ReSharper のキャッシュをクリアし (ReSharper > オプション > 一般 > キャッシュのクリア)、VS を再起動して再度ビルドすることで解決できます。その後、メッセージは消えるはずです。これは実際には解決策ではないことはわかっていますが、機能します。

于 2014-01-21T11:15:19.787 に答える
1

コントロールをページで宣言的に使用できるようにするには、タグ プレフィックスをコントロールの名前空間にマップする必要があります。

カスタム サーバー コントロール プロジェクトで、TagPrefixAttributeAssemblyInfo.cs ファイルに属性を追加しましたか?

名前空間と接頭辞の間のマッピングを作成するには、ファイルの最後にこの行を追加する必要があります。

[assembly: TagPrefix("MySite.misc", "TAC")]

ファイルの先頭に次の行を追加します。

Using System.Web.UI;

その後、カスタム サーバー コントロールをツールボックスから .aspx ページにドラッグすると、VS は Register ディレクティブを自動的に追加します。

別の方法として、カスタム コントロールが Web アプリケーションの複数のページで使用される場合は、register ディレクティブを使用する代わりに、web.config ファイルでタグ プレフィックス/名前空間のマッピングを指定できます。

<?xml version="1.0"?>
<configuration>
  <system.web>    
   <pages>
     <controls>
       <add tagPrefix="TAC" Assembly="MySite" 
         namespace="MySite.misc">
       </add>
     </controls>
   </pages>
  </system.web>
</configuration>
于 2012-07-20T02:33:36.263 に答える
0

.suo-file ( Solution User Options (.Suo) File )を削除して、同様の問題を解決しました。

于 2014-12-31T07:26:34.190 に答える
0

web.config ファイルを確認してください

<assemblies>
...
</assemblies> 

MySite.misc への参照が重複しているかどうかを確認するセクション

于 2012-07-18T19:44:16.627 に答える