cshtml ファイルで Web.config の値を取得する
環境によって、cshtml のリンク先を変更したい。 下記みたいな感じ。
本番環境
<a href="https://honban.net/">リンク</a>
ステージング環境
<a href="https://staging.net/">リンク</a>
cshtml なので普通にC#のコードを記述することで取得できる。
<a href="@System.Configuration.ConfigurationManager.AppSettings["UrlKey"]">リンク</a>
Web.config の設定
<appSettings> <add key="UrlKey" value="https://honban.net/"/> </appSettings>
参考
WScript.CreateObject: "MSScriptControl.ScriptControl" というオブジェクトを作成できませんでした。とエラーが出たとき
環境
Windwos10 64bit
起こっていること
cmd ファイルから JScript を起動する処理があって、JScript の中でユーザー入力をさせるため、下記のコードのように MSScriptControl.ScriptControl
を使用していた。
http://www.recfor.net/blog/diary/index.php?itemid=630
var obj=WScript.CreateObject("MSScriptControl.ScriptControl"); obj.language="vbscript"; obj.addcode("function getInput() getInput = inputbox(\"Message box prompt\",\"MessageBoxTitle\") end function"); var i=obj.eval("getInput"); WScript.Echo(i);
ただ、Windows10 64bit の環境で動かすと、
WScript.CreateObject: "MSScriptControl.ScriptControl" というオブジェクトを作成できませんでした。
というエラーメッセージが表示されてしまう。
インターネットでメッセージを調べれば色々な記事が出てくるんだけど、
64bit 環境では ScriptControl
が提供されていないためエラーになっている様子。
ユーザー入力したいだけだし他の何かを使おうと調べても、JScript では提供されていないみたいで、代替案が無い。
調べても MSScriptControl.ScriptControl
を使った方法ばかりヒットする。
解決方法
解決方法を探していて見つけた回答(マインクラフトのフォーラムにたどり着いてた)
http://forum.minecraftuser.jp/viewtopic.php?f=36&t=17205&start=80#p230261
仮にこれが原因の場合には 実行時に64bitOSかつsystem32配下で動いている場合には(64bit版で動いている場合には) SysWOW64配下で実行し直す(32bit版で再実行する) という回避策があるようです。
64bit でダメなんだから、32bit で動かせばいいよってことか。 (元々は Windows7 32bit で動作していた)
このページを参考にして、cmd ファイルの先頭に下記のコードを記述して、64bit の場合は、32bit 環境のコマンドプロンプトで起動し直すようにする。
if "%PROCESSOR_ARCHITECTURE%" NEQ "x86" ( C:\Windows\SysWOW64\cmd /C %0 exit )
これで、今まで通り 32bit 環境で動作するようになり、MSScriptControl.ScriptControl
も使えるようになる。
csprojにTarget属性を複数定義すると再定義になる
やりたかったこと
コンパイル後の処理をある条件で分岐したい
試してみたこと
<Target Name="AfterCompile" Condition="A"> </Target> <Target Name="AfterCompile" Condition="B"> </Target>
こうしたときに条件Aのときにコンパイル後の処理が全然実行されない。
原因
公式のドキュメントにあるように、Target属性は複数定義した場合、再定義されている。
https://msdn.microsoft.com/ja-JP/library/ms171462.aspx?f=255&MSPPError=-2147217396
解決方法
下記を参考にした。
https://stackoverflow.com/questions/8709946/order-of-afterbuild-tasks-in-visual-studio-projects
<Target Name="AfterCompile"> <CallTarget Condition="A" Targets="Aのときにする処理" /> <CallTarget Condition="B" Targets="Bのときにする処理" /> Targets="OverwriteAppConfigByBuildTarget" /> </Target> <Target Name="Aのときにする処理"> 処理 </Target> <Target Name="Bのときにする処理"> 処理 </Target>
AfterCompile の Target の中で条件分岐して、新しく Target を作成した。