10

カスタム.netプロファイルプロバイダーを実装するカスタムアセンブリを参照する小さなコンソールアプリケーションをC#で作成しています。カスタムクラスとアセンブリを参照するapp.configファイルに次のセクションを追加しました。

<system.web>
<profile defaultProvider="MyCompanyProfileProvider" inherits="MyCompany.Web.User.GenericProfile" automaticSaveEnabled="false">
    <providers>
        <clear/>
        <add name="MyCompanyProfileProvider" connectionStringName="defaultDatabase" applicationName="/myApplication" type="MyCompany.Web.ProfileProvider, MyCompany.Web"/>
    </providers>
    <properties>
        <add name="JobRoleId" type="System.Int32"/>
        <add name="LastCompetencyId" type="System.Int32" defaultValue="0"/>
        <add name="MixSettings" type="System.Xml.XmlDocument"/>
    </properties>
</profile></system.web>

ただし、アプリをデバッグモードで実行すると、app.configファイルで指定されたものではなく、System.Webアセンブリを検索しているように次のエラーが発生します。

タイプ'MyCompany.Web.User.GenericProfile'をアセンブリ'System.Web、Version = 2.0.0.0、Culture = neutral、PublicKeyToken=b03f5f7f11d50a3a'から読み込めませんでした。

アセンブリとカスタムプロファイルプロバイダーも使用し、問題なく動作するローカルWebアプリがあります。参照されているアセンブリが出力ディレクトリにコピーされていることを確認しました。

何か案は??

4

3 に答える 3

20

私はついにこれに対する答えを見つけました、そしてそれはとても簡単でした!(彼は何時間もの検索とデバッグの後で言います)。

カスタムプロバイダーがどのアセンブリにあるかを明示的に伝える必要がありました。プロバイダーを追加するときにタイプを指定するときにこれを行うだけでよいと思いました。

ただし、inherits属性でプロファイルを定義するときに定義する必要があります。そのようです:

前:

<profile defaultProvider="MyCompanyProfileProvider"
         inherits="MyCompany.Web.User.GenericProfile"
         automaticSaveEnabled="false">

後:

<profile defaultProvider="MyCompanyProfileProvider" 
         inherits="MyCompany.Web.User.GenericProfile, MyCompany.Web" 
         automaticSaveEnabled="false">

これが将来同じ問題を抱えている他の誰かに役立つことを願っています。

于 2010-04-20T09:11:23.887 に答える
0

クラスとアセンブリを指定するコンマの後ろの余分なスペースを削除してみてください。ただし、それで修正されるとは思いません。

アプリがSystem.Webアセンブリでカスタムクラスを検索していますが、これは非常に奇妙です。

失敗の詳細を取得するには、fuslogvwを使用します。

于 2010-04-19T08:40:49.280 に答える
0

あなたの解決策は、私がこの問題を追いかける貴重な時間を無駄にした後、私の申し訳ないことを救いました。いつものように、私は自分たちで解決する必要のある実際のITの問題ではなく、Microsoftの製品と戦う無駄な日々を過ごしてきました。私のApp.Config行はこのように見え、正常に機能しているようです。

<profile defaultProvider="DefaultProfileProvider" inherits="SmartTariffs_V13.ProfileCommon, SmartTariffs_V13">
  <providers>
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</profile>

ここで、SmartTariffs_V13はプロジェクトの名前であり、SmartTariffs_V13.ProfileCommonはそのプロジェクト内の.csファイルの名前です。これは「automaticSaveEnabled」タグを追加しなくても機能することがわかりましたが、ちょっと...

于 2015-05-04T06:23:08.670 に答える