作成日: 2015/12/20, 更新日: 2015/12/20
exe ファイルとは違う階層に、dll ファイルを配置して読み込みたい(参照設定)
プログラムは、同じ場所に置かないとエラーになる
- 小さいプログラムだと、exe ファイル1個で済むのでいいのですが、 大きいプログラムになると、複数の exe ファイルや 参照する dll ファイル、関連データ、設定データ等、いろいろなファイルが増えてきます。 ユーザーさんにとって、どれを起動すればいいの?と思われないように、起動用の exe ファイル以外は、フォルダにまとめて整理整頓したくなります。
- 関連データや設定データは、パスが変わったらパスの指定を変えれば読み込めるので、何とかなります。 しかし、参照プログラムはそう簡単にできませんでした。
スポンサーリンク
アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。 [続行] をクリックすると、アプリケーションはこのエラーを無視し、続行しようとします。 [終了] をクリックすると、アプリケーションは直ちに終了します。 ファイルまたはアセンブリ 'ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 、またはその依存関係の1つが読み込めませんでした。 指定されたファイルが見つかりません。
Public Class Class1 Public Sub ShowMessage(msg As String) Console.WriteLine(msg) End Sub End Class
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim c1 As New ClassLibrary1.Class1 c1.ShowMessage("hello") End Sub End Class
スポンサーリンク
コンフィグファイルに、探す場所を追加しよう
- MSDN を見ると、コンフィグファイルに指示を書けばいいとのことです。ソースやプロジェクトの設定を変えるのではないんですね。 で、コードベース要素かプローブ要素を書けばいいじゃん。とのことでした。今回の、私の目的に合う簡単な方法は、プローブ要素を書けばいいみたいです。 それだけでできるのであれば、以外に簡単ですね。
- んじゃ、やってみよう。 exe ファイルと同じ場所に、xxx.exe.config というコンフィグファイルが一緒にくっついているので、これを編集します。 どうせなので、Visual Studio に、ぽいっと放り込んで書き換えます。
- 初期設定はこうなっています。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <!-- ここから --> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="app" /> </assemblyBinding> </runtime> <!-- ここまで --> </configuration>
<probing privatePath="app;app2;app3\subapp" />
スポンサーリンク