为什么在我的项目中引用了 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 很可能会解决问题,现在大多数游戏玩家都在他们的电脑上安装了它。