SPSiteコンストラクターによるFileNotFoundException
-
06-07-2019 - |
質問
カスタムプロセス(MyApp.exe)でファームサーバー上の SPSite
のインスタンスをインスタンス化しようとし、それをパラメーターとしてURI全体( http:// mysite:80 / )。また、 MyApp.exe
を実行しているアカウントが Site Collection Administrator
であることを確認しました。
ただし、何をしようとしても SPSite
のインスタンスを作成できません。常に FileNotFoundException
をスローします。
誰でもアイデアを思いつきましたか?
StackTrace:
at Microsoft.SharePoint.SPSite..ctor(SPFarm ファーム、Uri requestUri、ブール contextSite、SPUserToken userToken)
で Microsoft.SharePoint.SPSite..ctor(String requestUrl)at MyCompanyName.Service.HelperClass.GetItemStateInSharePoint(SharePointItem アイテム)in C:\ Workspaces \ MyCompanyName \ Development \ Main \ MyCompanyName.SharePoint \ Service \ HelperClass.cs:line 555
もう1つの注意事項...私は問題なくブラウザからアクセスできるWebアプリケーション+サイトコレクションを持っています。
解決
SharePointが要求されたサイトコレクションをSharePoint構成データベースで見つけられない場合、SharePointはFileNotFoundExceptionをスローします。私の推測では、URL http:// mysite:80 にサイトコレクションをまだ作成していないと思われます。存在しないサイトコレクションのURLを使用して新しいSPSiteオブジェクトをインスタンス化しようとすると、次のスタックトレースが表示されます。
System.IO.FileNotFoundException : The site http://server/sites/bah could not be found in the Web application SPWebApplication
Name=SharePoint - 80 Parent=SPWebService.
at Microsoft.SharePoint.SPSite..ctor(SPFarm farm, Uri requestUri, Boolean contextSite, SPUserToken userToken)
at Microsoft.SharePoint.SPSite..ctor(String requestUrl)
サイトコレクションの適切なURLを指定するか、サーバーの全体管理を開いて新しいサイトコレクションを作成します。
他のヒント
ビルドプロパティのプラットフォームターゲットをx64に変更すると、SharePoint 2010でこの問題が解決しました。
このサイトを読む http://community.bamboosolutions.com/forums/t/ 8179.aspx OS x64ビットを実行していて、MSTest(32ビット)を使用している場合、失敗します。nunitが動作します!!!
SharePoint 2010にアクセスするコンソールアプリケーションの場合、プロジェクトのビルドターゲットがx64で、.NET Frameworkが3.5であることを確認してください。
この問題は、ユーザー許可の問題であり、次の許可を与えます
ユーザー権限 SharePointサイト ---最小読み取り権限
Sharepoint Server --- WSS_ADMIN_WPGグループに追加
データベース --- Sharepoint Content DB(サイトコレクションデータベース)-db_owner権限 Sharepoint Config DB(sharepointインストールの構成DB)--db_ownerパーミッション
ブログで詳細を読む
http://sharepointinstallation.blogspot.com/ 2010/12 / minimal-permission-required-to-execute.html
オブジェクトモデルが、指定したURLを気に入らない可能性もあります。サイトコレクションを作成した正確なURL、または代替アクセスマッピングで構成されている正確なURLのいずれかを提供しない場合、必ずしも意味をなさない可能性のある例外がスローされます。あなたの場合は、 http:// mysite
または http:// machinename
を試してみてください。
例外のスタックトレースが役立ちます。
「ちょうど私のコード」を無効にすることで、それが何のファイルで何が起こっているのかを知ることができると思います。ツールで->オプション->デバッグおよび例外の呼び出しスタック内のファイル名引数のデバッグ(もちろんデバッグできる場合)、または例外メッセージに名前が表示される場合があります。
web.configを確認し、そこにファイルが欠落している設定があるかどうかを確認します。
ログを探す12ハイブ。ログ設定が正しい場合、ファイルが失われます。
編集:すべてのDLLがGACにあるかどうかも確認します。 web.configファイルにすべての情報が含まれているかどうかを確認します:namespace、Classname、NameSpace、Version = version_number、Culture-your_culture、PublicKeyToken = your_signed_token
最近、コンストラクターのこの問題は、コンストラクターのスターの動作によって引き起こされる可能性があることを発見しました。
私はMOSS 2007を取り上げています。
完全なサイトURLをコンストラクターに渡す場合、実際にはURLのサイト部分のみを考慮し、Webアプリケーションセレクターコントロールで「現在選択されている」Webアプリケーションを選択します。
したがって、たとえば、" http:// webapp / sites / site " " http:// weabapp:22345 "現在選択されている(そのようなセレクターで最後に選択したとき)を呼び出すとき
SPSite site = new SPSite("http://webapp/sites/site")
&quot; http:// webapp:22345 / sites / site <のサイトオブジェクトを実際に作成しようとします&quot;失敗します。
同じ問題がありました。ユーザーIDでコンソールアプリケーションを実行したかった。私はWebアプリケーションの所有者+ Farm Adminです。それでもアプリケーションを実行できませんでした。
問題は
によって解決されました-
ビルドプロパティのプラットフォームターゲットをx64に変更する
-
サイトの設定-&gt;ユーザーと権限-&gt;サイトコレクション管理者には2つの名前がありました。他の名前を削除し、機能し始めました。
プロジェクトのコンパイルターゲットを「Any CPU」に設定したままにすることができます。重要なことは、MSTestホストプロセスを64ビットで実行するように構成することです。 .testsettingsファイルを開き、[ホスト]タブに移動して、[64ビットでテストを実行...]
を設定しますテストの実行時にVSが存在しないことを通知した場合、テストプロジェクトを再度削除して追加します(これに対するより良い回避策はわかりません)
お役に立てばと思います!
これと同じ問題が発生しましたが、さまざまな原因に精通しています。概要を次に示します。
- 入力ミスや間違った住所の入力があった可能性があります
- プロセスを実行しているユーザーアカウントには、SharePointサイトに対する読み取りアクセス許可、SharePoint構成データベースのdbo、およびコンテンツデータベースの必要なアクセス許可がありません。
- プロセスは、64ビットサーバー上で構築する場合、64ビットプロセスである必要があります(デフォルトは64ビット「任意のCPU」です)。
- プロセスは.NET 3.5をターゲットにする必要があります
数週間前、これに悩まされました。最終的に、見つからなかったファイルがSharePointアセンブリ自体であることを発見しました。ランタイムは、遅延バインディングを介してサテライトアセンブリをロードできませんでした。
私の問題の解決策は、SharePoint 12.0.0.0アセンブリをGACに登録することでした。あなたの問題と同じようには聞こえませんが、参考までに。
数日前に同じ問題に直面しました。その解決策は、SPSiteオブジェクトを作成しようとしているアプリケーションを設定して、SharepointのWebアプリケーションと同じAppPoolを使用することでした。
お役に立てば幸いです。
x64でのMSTestの問題がこの問題の原因でした。コンソールアプリで動作します。
同様の問題があります。
私のシナリオでは、コンソールアプリケーションからSPSiteのインスタンスを作成できましたが、別のチームメンバーが作成しようとすると、アプリケーションは上記と同じ例外をスローしました。
解決策:Content Dbサーバーボックスに他のチームメイトを管理者として追加しました(これは誰にとっても不可能な場合があります)。コードは正常に機能し、エラーはありません
SharePoint 2010と同じ問題。ただし、問題はSharePointオブジェクトモデルにアクセスするWebサービスにありました。このサービスを実行するアプリプールはファーム管理者である必要があります。
NUnitへの切り替えは、誰にとっても選択肢ではないかもしれません。
私の場合、問題は64ビットサーバーにいて、すべてのCPUをチェックしたため(正しいバージョンを選択していました)、テスト設定は「テストを32ビットプロセスで実行する」に設定されていました(GAH!)
MSTestで、[テスト]に移動->>テスト設定の編集->トレースとテストの影響。
ホストを選択します。
正しいバージョンに対して実行していることを確認してください。
VS2010 SP1、MSTestのチェックリストです。
- .NET 3.5をテストの対象にするにはSP1が必要です。 .NET 4.0では動作しません
- サイトがロードされていることを確認します-ハイパーリンクであるため、VS2010エディターから直接サイトを起動しました
- ビルド設定を確認します。サーバーが64ビットの場合に64ビットを選択するには。
- 私の場合、64ビットサーバーがありましたが、x64を選択すると失敗します。それが私の最初の手がかりでした。
- テスト設定が正しいビットをサポートしていることを確認します。
Sharepoint 2010にアクセスしようとすると同じ問題が発生しました。
ターゲットフレームワークを.NET 3.5。に変更することで修正しました。これは、Sharepoint 2010でサポートされているバージョンです。
私の場合、それは間違いなく、Windowsにログインしていたアカウントのパーミッションの問題でした。
管理者として実行されているSharePoint管理シェルでこのコマンドを試してください:
Get-SPSite ' http:// yoursite / yourcollection '
エラーが発生した場合、アプリプールユーザーまたはSharePointのインストールに使用したアカウントとしてSharePointサーバーにログオンし、上記のコマンドを再試行します。
それが機能する場合、以前のアカウントに権限の問題があることがわかります。問題を修正するには、同じシェルウィンドウでこのコマンドを実行し、VSで使用するアカウントを指定します。
Add-SPShellAdmin -UserName Domain \ User
同じ問題を抱えていたので、以下の変更を加えて動作を開始しました。
- Visual Studioのプラットフォームターゲットをx64に変更する
- 「管理者」でビジュアルスタジオを実行していることを確認してください。モード。