为什么在我的项目中引用了 dll 文件后,当我构建项目时它们不在我的发布目录中?
Why after referenced dll files to my project they are not on my release directory when i build the project?
当我兄弟 运行 正在运行他的程序时,他得到异常说没有找到一个或多个 dll 文件。
我向他发送了 3 个 dll 文件,他试图将它们从他所在的位置 运行安装程序,他还试图将它们放在我所在的目录中:
C:\Temp\dlls\DLL'S\Microsoft.DirectX.DLL
他创建了这个目录并将它们放在那里但没有帮助。
我确定一旦我引用了我的程序中的 dll 文件就不需要它们了。并且至少将它们放在您 运行 运行程序但它不工作的目录中。
我想要的是,我的兄弟和任何其他将 运行 该程序的人都不需要他电脑上的 dll 文件,如果他确实需要它们,那么将它们放在你所在的目录中 运行从中调用程序就足够了。我该如何解决?
我兄弟也试图将 dll 放在他 运行 从中安装程序的地方。
3个dll文件是:
Microsoft.DirectX.Direct3D.DLL, Microsoft.DirectX.Direct3DX.DLL, Microsoft.DirectX.DLL
问题是他为什么会得到这个异常?它真的发送 see/find dll 文件吗?或者也许他的机器不支持这个 directx 文件?奇怪。
另一件事,当我将鼠标放在硬盘上的 dll 文件上时,我看到一个气球提示说:
文件描述:Microsoft Managed Direct3D Debug
也许问题是 directx 的 dll 文件属于调试目录,但我让我的程序在发布目录中构建?
无论如何我还找不到任何解决方案。这是异常消息:
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.DirectX.Direct3DX.dll' or one of its dependencies. The specified module could not be found.
File name: 'Microsoft.DirectX.Direct3DX.dll'
at mws.ScanningClouds.InitializeDirectX()
at mws.ScanningClouds.ScanClouds_Load(Object sender, EventArgs e) in d:\C-Sharp\Download File\Downloading-File-Project-Version-012\Downloading File\ScanningClouds.cs:line 142
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.Form.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.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
这是发生异常的那一行代码 142:
private void ScanClouds_Load(object sender, EventArgs e)
{
Boolean bl = InitializeDirectX();
if (bl == false)
{
MessageBox.Show("Error initializing directX!");
Application.Exit();
}
}
该行是:Boolean bl = InitializeDirectX();
和方法:InitializeDirectX()
private Boolean InitializeDirectX()
{
DispMode = Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode;
D3Dpp = new PresentParameters();
D3Dpp.BackBufferFormat = DispMode.Format;
D3Dpp.PresentFlag = PresentFlag.LockableBackBuffer;
D3Dpp.SwapEffect = SwapEffect.Discard;
D3Dpp.PresentationInterval = PresentInterval.One; //wait for vertical sync. Synchronizes the painting with
//monitor refresh rate for smoooth animation
D3Dpp.Windowed = true; //the application has borders
try
{
D3Ddev = new Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, pictureBox1.Handle,
CreateFlags.SoftwareVertexProcessing, D3Dpp);
D3Ddev.VertexFormat = CustomVertex.PositionColored.Format;
D3Ddev.RenderState.Lighting = false;
D3Ddev.RenderState.CullMode = Cull.CounterClockwise;
//load imagesBmp to panelTexture
//panelTexture = Texture.FromBitmap(D3Ddev, imagesBmp, Usage.Dynamic, Pool.Default)
backTexture = TextureLoader.FromStream(D3Ddev, mymem);
//scannerTexture = TextureLoader.FromFile(D3Ddev, @"D:\Buttons\Radar\radar.png");
scannedCloudsTexture = new Texture(D3Ddev, 512, 512, 1, Usage.Dynamic, Format.A8R8G8B8, Pool.Default);
//sprite is used to draw the texture
D3Dsprite = new Sprite(D3Ddev);
return true;
}
catch
{
return false;
}
}
告诉你兄弟安装DX SDK或者在windows 8上安装windows SDK。
该程序集不属于您的应用程序文件夹,它是围绕 windows API 构建的一组库的一部分,并且这些程序集与其他文件有一组复杂的关系,这些文件用于在你的电脑。
编辑:由于没有考虑这个答案"good enough"我想我会详细说明......
所需的文件是您的代码所具有的深度依赖链的一部分,通过向您的解决方案添加一个安装程序项目并构建 windows 安装框架将突出显示缺少的内容并提示您的兄弟安装安装 DX 应用程序时正确的部件。
它应该会在说 "this thing depends on foo which is not installed, would you like to install it now?"
后自动启动这些安装
假设你的兄弟回答是......问题解决了!
或者,我最初的回答是,安装 SDK 很可能会解决问题,现在大多数游戏玩家都在他们的电脑上安装了它。
当我兄弟 运行 正在运行他的程序时,他得到异常说没有找到一个或多个 dll 文件。
我向他发送了 3 个 dll 文件,他试图将它们从他所在的位置 运行安装程序,他还试图将它们放在我所在的目录中:
C:\Temp\dlls\DLL'S\Microsoft.DirectX.DLL
他创建了这个目录并将它们放在那里但没有帮助。
我确定一旦我引用了我的程序中的 dll 文件就不需要它们了。并且至少将它们放在您 运行 运行程序但它不工作的目录中。
我想要的是,我的兄弟和任何其他将 运行 该程序的人都不需要他电脑上的 dll 文件,如果他确实需要它们,那么将它们放在你所在的目录中 运行从中调用程序就足够了。我该如何解决?
我兄弟也试图将 dll 放在他 运行 从中安装程序的地方。
3个dll文件是:
Microsoft.DirectX.Direct3D.DLL, Microsoft.DirectX.Direct3DX.DLL, Microsoft.DirectX.DLL
问题是他为什么会得到这个异常?它真的发送 see/find dll 文件吗?或者也许他的机器不支持这个 directx 文件?奇怪。
另一件事,当我将鼠标放在硬盘上的 dll 文件上时,我看到一个气球提示说:
文件描述:Microsoft Managed Direct3D Debug
也许问题是 directx 的 dll 文件属于调试目录,但我让我的程序在发布目录中构建?
无论如何我还找不到任何解决方案。这是异常消息:
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.DirectX.Direct3DX.dll' or one of its dependencies. The specified module could not be found.
File name: 'Microsoft.DirectX.Direct3DX.dll'
at mws.ScanningClouds.InitializeDirectX()
at mws.ScanningClouds.ScanClouds_Load(Object sender, EventArgs e) in d:\C-Sharp\Download File\Downloading-File-Project-Version-012\Downloading File\ScanningClouds.cs:line 142
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.Form.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.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
这是发生异常的那一行代码 142:
private void ScanClouds_Load(object sender, EventArgs e)
{
Boolean bl = InitializeDirectX();
if (bl == false)
{
MessageBox.Show("Error initializing directX!");
Application.Exit();
}
}
该行是:Boolean bl = InitializeDirectX();
和方法:InitializeDirectX()
private Boolean InitializeDirectX()
{
DispMode = Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode;
D3Dpp = new PresentParameters();
D3Dpp.BackBufferFormat = DispMode.Format;
D3Dpp.PresentFlag = PresentFlag.LockableBackBuffer;
D3Dpp.SwapEffect = SwapEffect.Discard;
D3Dpp.PresentationInterval = PresentInterval.One; //wait for vertical sync. Synchronizes the painting with
//monitor refresh rate for smoooth animation
D3Dpp.Windowed = true; //the application has borders
try
{
D3Ddev = new Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, pictureBox1.Handle,
CreateFlags.SoftwareVertexProcessing, D3Dpp);
D3Ddev.VertexFormat = CustomVertex.PositionColored.Format;
D3Ddev.RenderState.Lighting = false;
D3Ddev.RenderState.CullMode = Cull.CounterClockwise;
//load imagesBmp to panelTexture
//panelTexture = Texture.FromBitmap(D3Ddev, imagesBmp, Usage.Dynamic, Pool.Default)
backTexture = TextureLoader.FromStream(D3Ddev, mymem);
//scannerTexture = TextureLoader.FromFile(D3Ddev, @"D:\Buttons\Radar\radar.png");
scannedCloudsTexture = new Texture(D3Ddev, 512, 512, 1, Usage.Dynamic, Format.A8R8G8B8, Pool.Default);
//sprite is used to draw the texture
D3Dsprite = new Sprite(D3Ddev);
return true;
}
catch
{
return false;
}
}
告诉你兄弟安装DX SDK或者在windows 8上安装windows SDK。 该程序集不属于您的应用程序文件夹,它是围绕 windows API 构建的一组库的一部分,并且这些程序集与其他文件有一组复杂的关系,这些文件用于在你的电脑。
编辑:由于没有考虑这个答案"good enough"我想我会详细说明......
所需的文件是您的代码所具有的深度依赖链的一部分,通过向您的解决方案添加一个安装程序项目并构建 windows 安装框架将突出显示缺少的内容并提示您的兄弟安装安装 DX 应用程序时正确的部件。
它应该会在说 "this thing depends on foo which is not installed, would you like to install it now?"
后自动启动这些安装假设你的兄弟回答是......问题解决了!
或者,我最初的回答是,安装 SDK 很可能会解决问题,现在大多数游戏玩家都在他们的电脑上安装了它。