トップ回答者
ASP.netでSharepointクラスを使うとコンパイル時エラーになります。

質問
-
ASP.NET WEBアプリケーション作成 -> Webフォーム追加 -> Microsoft.Office, Microsoft.Sharepointなど参照追加 -> ボタン追加 -> ButtonEventの中に SPsite site = new SPSite("http://#$"'#($"); -> ctrl+f5
この手順で作業を行いました、前の質問で 及川 紘旭さんからASP.netでもSharepointのAPIが使えると聞きましたのでASP.netアプリケーションを作って参照を追加してSharepointで検索Webパーツ作ったものがあるのでソースを貼り付けたらエラーメッセージなくコディングできました。
しかしctrl+f5でコンパイルすれば
”Microsoft SharePoint は 32 ビット処理でサポートされていません。64 ビット実行可能ファイルを実行していることを確認してください。 ”
System.PlatformNotSupportedException: Microsoft SharePoint
というエラーになります。
私と完全に同じ症状でフォーラムに質問があるのを見つけて呼んでみました
http://social.msdn.microsoft.com/Forums/ja-JP/f5e8bd17-b50f-45c6-8d58-37d6fbacba25/64
原因はたぶんSharepointクラスはコンパイルするとき64ビットの何かを求めるがASP.net Webアプリケーションはコンパイル時32ビットでコンパイルするのではないかと思います。 googleでAsp.net 32bitで検索してみたら少し違う問題だと思いましたがとにかく IIS(6.0)マネージャのアプリケーションプールでASP.NET4.0の32bitアプリケーションの有効化をTrueしてもだめでした。
開発環境は
WindowsServer2008 R2 64bit
Visualstudio2012 proffessional
Sharepoint2013です。
上のリンクではある程度原因は分かりましたがその解決方法が分からなかったので質問します。
あえてASP.netでSharepointのクラスを使おうとする理由は以前ASP.netとSQLで作ったサーバーファイル検索アプリケーションをSharepointの検索エンジンを使って検索するためです。
Sharepoint Webパーツで最初から作る方法もありますがASP.netでSharepointのクラスが使えるなら以前のASP.netアプリケーションで七部だけ修正すればいけるだろうと思ってASP.netでsharepointのクラスを使おうとしています。
ご存知の方いらっしゃればぜひ教えていただきたいです。
回答
-
Sharepoint に関しては全く知識はありませんが、ASP.NET のところだけちょっとレスします。
> ASP.net Webアプリケーションはコンパイル時32ビットでコンパイルするのではないかと思います。
ASP.NET も .NET Framework のアプリですから「32ビットでコンパイル」ということはないです。詳しくは以下のページを見てください。
Part 2. .NET Framework 2.0 アプリケーションの 64 ビット対応
http://blogs.msdn.com/b/nakama/archive/2008/11/06/part-2-net-framework-2-0-64.aspxPart 3. ASP.NET 2.0 Web アプリケーションの 64 ビット対応
http://blogs.msdn.com/b/nakama/archive/2008/11/13/part-3-asp-net-2-0-web-64.aspx"*.aspx ファイルや *.asmx ファイルは実行時に .dll ファイルにコンパイルされますが、これらのファイルはすべて Any CPU としてコンパイルされます。このため、この .dll ファイルが 32/64 どちらで動作するのかは、ワーカプロセスの動作モードにより決定されます。"
- 回答としてマーク Gs.NangChun 2013年9月9日 2:09
-
Server Objectの代わりにClientContextを使いました。完全にできたとはいえませんがとにかく何か検索はできました。
SPSite~(sharepointのserverobjectクラス)の代わりClientContextを使用
http://code.msdn.microsoft.com/Query-Search-with-the-649f1bc1
最後のコンソール出力の代わりLabel二出力するように修正して確認しました。
検索先がどうなっているかがまだ分かりませんがおそらくクロールされているすべての範囲から検索しているのではないかと思います。
- 回答としてマーク Gs.NangChun 2013年9月10日 5:13
- 編集済み Gs.NangChun 2013年9月10日 5:15
すべての返信
-
Sharepoint に関しては全く知識はありませんが、ASP.NET のところだけちょっとレスします。
> ASP.net Webアプリケーションはコンパイル時32ビットでコンパイルするのではないかと思います。
ASP.NET も .NET Framework のアプリですから「32ビットでコンパイル」ということはないです。詳しくは以下のページを見てください。
Part 2. .NET Framework 2.0 アプリケーションの 64 ビット対応
http://blogs.msdn.com/b/nakama/archive/2008/11/06/part-2-net-framework-2-0-64.aspxPart 3. ASP.NET 2.0 Web アプリケーションの 64 ビット対応
http://blogs.msdn.com/b/nakama/archive/2008/11/13/part-3-asp-net-2-0-web-64.aspx"*.aspx ファイルや *.asmx ファイルは実行時に .dll ファイルにコンパイルされますが、これらのファイルはすべて Any CPU としてコンパイルされます。このため、この .dll ファイルが 32/64 どちらで動作するのかは、ワーカプロセスの動作モードにより決定されます。"
- 回答としてマーク Gs.NangChun 2013年9月9日 2:09
-
もうひとつ気がついたことがありました。
Visual Studio の ASP.NET 開発サーバーを使ってませんか? それが 64-bit OS の WOW 上で 32-bit 動作しているから今回のような問題が出るということはありませんか?
Part 1. 64 ビット Windows OS の基本知識
http://blogs.msdn.com/b/nakama/archive/2008/10/30/part-1-64-windows-os.aspx -
ご返事ありがとうございます。
part3は検索で呼んでみましたが難しくてよく理解できなかったのでpart1からもう一度ゆっくり呼んでみます。
"Visual Studio の ASP.NET 開発サーバーを使ってませんか? それが 64-bit OS の WOW 上で 32-bit 動作しているから今回のような問題が出るということはありませんか?"
これは VisualStudioのASP.NET 開発サーバーというのが理解できませんが、この開発環境を作るときやったのは
Windows2008 R2 64Bit Setup -> MSSQL Setup -> VisualStudio2012 Setup -> Sharepoint2013 Setup
これだけです。ASP.netはVisual Studioをインストールすると基本含まれているものだと認識しています。
とにかく教えていただいたリンクの内容を理解できるまで読んでみます。ありがとうございます。
------
part1を呼んでみましたがSurferOnWwwさんがおっしゃったどおりWindows 64Bitに VisualStudio2012がインストールされているからデバックしようとするとコンパイル過程で問題が起きるのかと思います。
一つ気になるのは、Windows 64BitでASP.netのコンパイルするからというわけでエラーになるのであればなぜButtonを押すまではエラーにならないのかな...という疑問があります。Sharepointのクラスを呼び出すまではちゃんとコンパイルして配置したButtonを表示してButtonを押してSPContext(Sharepointのクラス)を呼び出すときあんなエラーになっていますので少し気になりますね。
とにかくSharepointはWindows 64Bitを要求しますので何とかしないければいけないと思います、part2とpart3にその方法があってほしいですね、いったんもっと呼んでいきます。
- 編集済み Gs.NangChun 2013年9月5日 1:27
-
> これは VisualStudioのASP.NET 開発サーバーというのが理解できませんが、
開発マシンで IIS を使用する設定をしないで Web アプリを動かすと([デバッグ(D)]⇒[デバッグ開始(S)]または[デバッグなしで開始(H)])、ASP.NET 開発サーバー上で実行されるはずです。
開発サーバーは手軽で便利ですが、開発マシンで IIS が使えるのであれば、開発サーバーを開発に利用するのは避けたほうがいい(IIS を使うべき)と思います。
詳しくは以下のページを見てください。
ASP.NET 開発サーバーと IIS
http://surferonwww.info/BlogEngine/post/2011/11/18/ASPNET-development-server-and-IIS.aspx
> デバックしようとするとコンパイル過程で問題が起きるのかと思います。ASP.NET 開発サーバーを使っているなら、問題はコンパイル時ではなく、実行時に起こっているはずです。ASP.NET は WOW 上で 32-bit で動くのに Sharepoint が対応できないということではないかと思います。
-
Server Objectの代わりにClientContextを使いました。完全にできたとはいえませんがとにかく何か検索はできました。
SPSite~(sharepointのserverobjectクラス)の代わりClientContextを使用
http://code.msdn.microsoft.com/Query-Search-with-the-649f1bc1
最後のコンソール出力の代わりLabel二出力するように修正して確認しました。
検索先がどうなっているかがまだ分かりませんがおそらくクロールされているすべての範囲から検索しているのではないかと思います。
- 回答としてマーク Gs.NangChun 2013年9月10日 5:13
- 編集済み Gs.NangChun 2013年9月10日 5:15
-
> Server Objectの代わりにClientContextを使いました。
64-bit プロセスからしか呼べない Server Object を使うのは諦めて、32-bit プロセスから呼び出せる(?)ClientContext を使うことにしたということでしょうか?
そうだとすると、先の私のレス「ASP.NET 開発サーバーを使っているなら、問題はコンパイル時ではなく、実行時に起こっているはずです。ASP.NET は WOW 上で 32-bit で動くのに Sharepoint が対応できないということではないかと思います。」は理解していただけなかったようで残念です。
IIS 上で ASP.NET を 64-bit で動作させれば(即ち実環境と同じ状態)、ASP.NET から「64-bit プロセスからしか呼べない Server Object」を呼んで問題なく動くと思うのですが、試してみましたか?
-
最後まで詳しいご説明ありがとうございます。
まずClientContextクラスを使ったのはそもそもAsp.net Web ApplicationでServerObjectを使う方法があまりよくないという話を聞きました(きっとエラー出るはずだし方法は歩けど使わないほうがいいと..)、代わりにCliecntContextかRestなどを使ったほうがいいということでClientContextクラスを使って試したらいけました。
正直サーバーやIIS部分はよく分かりません、このごろSharepointはじめてから何回かIISの問題にぶつかって検索してみたり上司に教えてもらったぐらいかな...まあこの問題のおかげでまたいろいろ調べてみたり触ってみたりしましたがやっぱ難しいですね。
「ASP.NET 開発サーバーを使っているなら、問題はコンパイル時ではなく、実行時に起こっているはずです。ASP.NET は WOW 上で 32-bit で動くのに Sharepoint が対応できないということではないかと思います。」
この話は昨日の返信からなんとなく分かりそうです。IISを64bitにするのは調べて試してみます、どうせ理解せずに終われば後でまた同じ問題で困ることになると思いますし...
ASP.NETを64bitに換えてServerObjectが使えるようになったらまた一言つけておきます。
ありがとうございました。