0

短編小説:リソースは、実行時に、実行する必要がない場合でも、プロジェクトのすべての参照を使用します。

長い話:Autocad内で使用される.netdllを作成しています。これは.netフォームのコレクションです。もちろん、プロジェクトはいくつかのautocaddllを参照しています。テストを支援するために、フォームコードをAutoCADコードから切り離しました。したがって、projをdllとしてコンパイルすると、autocadで使用できます。exeとしてコンパイルすると、フォームが読み込まれます(モックオブジェクトをデータとして使用)。リソースを使用してフォームに画像を追加する場合を除いて、すべて問題ありません。

Image img = global::myproj.Properties.Resources.myimage;

これにより、実行時に次のエラーが発生します。

System.IO.FileNotFoundException was unhandled
Message="Could not load file or assembly 'acmgd, Version=17.1.0.0, Culture=neutral,     PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified."

AutoCADを使用していないため、そのdllをロードできません。ただし、プロジェクトの「exe」形式では必要ありません。実際、画像を削除すると(明らかに、autocadとは関係ありません)、すべてが機能します。これは、プロジェクトの「リソース」部分が実行時に、プロジェクトに含まれるすべてのdllを参照するようなものです...使用されていない場合でも。

AutoCAD dllを削除せずに、プロジェクトに画像を追加するにはどうすればよいですか?画像をプロジェクトの一部にしたい(つまり、ディスク上のどこかではなく、dll内に)。

ところで:autocaddllは単なる例です。プロジェクトをいくつかのアプリで「ホスト」する必要がある他のdllでも同じ問題が発生すると思います。

問題のある行:

pictureBox9.Image = global::MyProj.Properties.Resources.tdb2;

フルスタックトレース:

System.IO.FileNotFoundException was unhandled
Message="Could not load file or assembly 'acmgd, Version=17.1.0.0, Culture=neutral,    PublicKeyToken=null' or one of its dependencies. The system cannot find the file   specified."
Source="mscorlib"
FileName="acmgd, Version=17.1.0.0, Culture=neutral, PublicKeyToken=null"
FusionLog="=== Pre-bind state information ===\r\nLOG: User = user\r\nLOG: DisplayName = acmgd, Version=17.1.0.0, Culture=neutral, PublicKeyToken=null\n (Fully-specified)\r\nLOG: Appbase = file:<full path>/\r\nLOG: Initial PrivatePath = NULL\r\nCalling assembly : MyProj, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.\r\n===\r\nLOG: This bind starts in default load context.\r\nLOG: No application configuration file found.\r\nLOG:      Using machine configuration file from  C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\config\\machine.config.\r\nLOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).\r\nLOG: Attempting download of new URL file:<full path>/acmgd.DLL.\r\nLOG: Attempting download of new URL file:<full path>/acmgd/acmgd.DLL.\r\nLOG: Attempting download of new URL file:<full path>/acmgd.EXE.\r\nLOG: Attempting download of new URL file:<full path>/acmgd/acmgd.EXE.\r\n"
   StackTrace:
   at System.ModuleHandle.ResolveMethod(Int32 methodToken, RuntimeTypeHandle* typeInstArgs, Int32 typeInstCount, RuntimeTypeHandle* methodInstArgs, Int32 methodInstCount)
   at System.ModuleHandle.ResolveMethodHandle(Int32 methodToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)
   at System.Reflection.CustomAttributeData..ctor(Module scope, CustomAttributeRecord caRecord)
   at System.Reflection.CustomAttributeData.GetCustomAttributes(Module module, Int32 tkTarget)
   at System.Reflection.CustomAttributeData.GetCustomAttributes(Assembly target)
   at System.Resources.ResourceManager.GetNeutralResourcesLanguage(Assembly a, UltimateResourceFallbackLocation& fallbackLocation)
   at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
   at System.Resources.ResourceManager.GetObject(String name, CultureInfo culture, Boolean wrapUnmanagedMemStream)
   at System.Resources.ResourceManager.GetObject(String name, CultureInfo culture)
   at MyProj.Properties.Resources.get_tdb2() in <full path>Resources.Designer.cs:line 93
   at MyProj.MyForm.InitializeComponent() in <full path>\MyForm.Designer.cs:line 524
   at MyProj.MyForm..ctor() in <full path>\MyForm.cs:line 28
   at MyProj.MyForm.tabPage_Enter(Object sender, EventArgs e) in <full path>\MyForm.cs:line 121
   at System.Windows.Forms.Control.OnEnter(EventArgs e)
   at System.Windows.Forms.TabPage.OnEnter(EventArgs e)
   at System.Windows.Forms.TabPage.FireEnter(EventArgs e)
   at System.Windows.Forms.TabControl.OnSelected(TabControlEventArgs e)
   at System.Windows.Forms.TabControl.WmSelChange()
   at System.Windows.Forms.TabControl.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.SendMessage(HandleRef hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at System.Windows.Forms.Control.SendMessage(Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.Control.ReflectMessageInternal(IntPtr hWnd, Message& m)
   at System.Windows.Forms.Control.WmNotify(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
   at System.Windows.Forms.Control.DefWndProc(Message& m)
   at System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.TabControl.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.Run(Form mainForm)
   at PidXp.MyForm.Main() in <full path>\MyForm.cs:line 23
   at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

(一部のパス/名前が置き換えられました)

4

0 に答える 0