如何提供一个私有并排清单来正确定位 .NET Dll 作为 COM 提供程序?

2023-12-27

我正在研究私有注册免费 WinSxS 的配置,并提供简单的程序集清单文件,以便在部署和运行时将 Delphi 可执行文件(COM 客户端)和 .NET (C#) COM 可见 DLL 拼接在一起。

我已经研究了 MSDN 上提供的文档“与非托管代码互操作” https://learn.microsoft.com/en-us/dotnet/framework/interop/,有关的部分"COM 可调用包装器" https://learn.microsoft.com/en-us/dotnet/framework/interop/com-callable-wrapper and "如何:配置基于 .NET Framework 的 COM 组件以进行免注册激活" https://learn.microsoft.com/en-us/dotnet/framework/interop/configure-net-framework-based-com-components-for-reg尤其。

经过一个多星期的研究并在文档不足的循环中被(重新)引导,我决定将我的第一个问题放在这里。

计划的部署结构如下所示:

./install-root
├───ProgramSuite1
│   ├───bin
│   │       DelphiNativeCOMClient1.exe
│   │       DelphiNativeCOMClient1.exe.config
│   │       DelphiNativeCOMClient2.exe
│   │       DelphiNativeCOMClient2.exe.config
│   |       ...
│   │
│   └───data
│           ...
├───ProgramSuite2
│   ├───bin
│   │       DelphiNativeCOMClient3.exe
│   │       DelphiNativeCOMClient3.exe.config
│   │       DelphiNativeCOMClient4.exe
│   │       DelphiNativeCOMClient4.exe.config
│   |       ...
│   │
│   └───data
│           ...
└───SharedLibs
    ├───MyCompany.Libs.Set1
    │       MyCompany.Libs.Set1.manifest
    │       SomeManagedCOMServerA.dll
    │       SomeNativeCOMServerB.dll
    │       SomeNativeCOMServerC.dll
    │
    └───MyCompany.Libs.Set2
            MyCompany.Libs.Set2.manifest
            SomeManagedCOMServerB.dll
            SomeNativeCOMServerX.dll
            SomeManagedCOMServerA.dll

下面是关于 Delphi 本机可执行文件和 C# .NET COM 服务器 DLL 的实现的简短概述(我省略了本机 COM 服务器的示例,因为这些东西已经运行良好并且毫无疑问)。
我主要遵循以下提供的内容“免注册激活 COM 组件:演练” https://msdn.microsoft.com/en-us/library/ms973913.aspx。主要区别在于我使用 Delphi 而不是 C、C++ 或旧的 VB 作为native client.

TestDllConsoleApp.exe

TestDllConsoleApp.dpr

program TestDllConsoleApp;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  DllTests.Common,
  WinApi.ActiveX,
  WinApi.Windows,
  // These were generated using the tlbimplib tool
  CSharpCOMDll_TLB in 'CSharpCOMDll_TLB.pas',
  mscorlib_TLB in 'mscorlib_TLB.pas';

var
    comInterface1 : ICOMInterface1;
    comInterface2 : ICOMInterface2;
    intf1CoClass : _COMImplClass1; 
    intf2CoClass : _COMImplClass2;
    res : HRESULT;
    coInitializeRes : integer;
begin
    //Initialize COM
    coInitializeRes := CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
    if (coInitializeRes <> S_OK) and (coInitializeRes <> S_FALSE) then begin
        System.ExitCode := 1;
        Exit(); // GUARD
    end;
    try
        try
            intf1CoClass := CoCOMImplClass1.Create();
            res := intf1CoClass.QueryInterface(IID_ICOMInterface1,comInterface1);
            System.WriteLn(comInterface1.GetModuleName());

            intf2CoClass := CoCOMImplClass2.Create();
            res := intf2CoClass.QueryInterface(IID_ICOMInterface2,comInterface2);
            System.WriteLn(comInterface2.GetModuleName());
        except
        on E: Exception do
            Writeln(E.ClassName, ': ', E.Message);
        end;
    finally
        //Uninitialize COM
        CoUninitialize();
    end;
end.

TestDllConsoleApp.manifest

(嵌入资源 ID 1)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> 
    <assemblyIdentity name="MyCompany.Software.Application" processorArchitecture="x86" version="1.0.0.0" type="win32" />
    <description>A native COM client application.</description>
    <asmv3:trustInfo>
        <asmv3:security>
            <asmv3:requestedPrivileges>
                <asmv3:requestedExecutionLevel level="asInvoker" uiAccess="false" />
            </asmv3:requestedPrivileges>
        </asmv3:security>
    </asmv3:trustInfo>
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
        <application>
            <!-- Windows 10 and Windows Server 2016 --> 
            <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
            <!-- Windows 8.1 and Windows Server 2012 R2 -->
            <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
            <!--  Windows 8 and Windows Server 2012 -->
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
            <!-- Windows 7 and Windows Server 2008 R2 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
            <!-- Windows Vista and Windows Server 2008 -->
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
        </application>
    </compatibility>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="MyCompany.Libs.Set1" version="1.0.0.0" processorArchitecture="x86" />
        </dependentAssembly>
    </dependency>
</assembly>

TestDllConsoleApp.exe.config

(部署在与可执行文件相同的文件位置)

<configuration>  
   <runtime>  
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
         <probing privatePath="..\..\SharedLibs"/>  
      </assemblyBinding>  
   </runtime>  
</configuration>  

CSharpCOMDll.dll

(将部署在SharedLibs\MyCompany.Libs.Set1目录)

Assemblyinfo.cs

#region Using directives
using System;
using System.Reflection;
using System.Runtime.InteropServices;

#endregion
[assembly: AssemblyTitle ("CSharpCOMDll")]
[assembly: AssemblyProduct ("CSharpCOMDll")]
[assembly: AssemblyCopyright ("Copyright 2018")]
[assembly: ComVisible (true)]
[assembly: AssemblyVersion ("1.0.0.0")]
[assembly: Guid ("045d53ab-a9e4-4036-a21b-4fe0cf433065")]

COMImplClass1.cs

// Using namespaces ...
namespace CSharpCOMDll
{
    [Guid("6BDAF8DD-B0CF-4CBE-90F5-EA208D5A2BB0")]
    public interface ICOMInterface1  
    {
        string GetModuleName();
    }
    
    [Guid("4CD39F25-0EB9-4CD0-9B4C-6F5DB5C14805")]
    public class COMImplClass1 : ICOMInterface1
    {
        public string GetModuleName() 
        {
            return typeof(COMImplClass1).Module.FullyQualifiedName;
        }
    }
}

COMImplClass2.cs

 // Using namespaces ...
namespace CSharpCOMDll
{

    [Guid("BE69E9C7-1B37-4CA8-A3C1-10BFA9230940")]
    public interface ICOMInterface2  
    {
        string GetModuleName();
    }

    [Guid("067E5980-0C46-49C7-A8F0-E830877FB29C")]
    public class COMImplClass2 : ICOMInterface2
    {
        public string GetModuleName() 
        {
            return typeof(COMImplClass1).Module.FullyQualifiedName;
        }
    }
}

CSharpCOMDll.manifest

(嵌入到资源ID为2的DLL中)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
  manifestVersion="1.0">
    <assemblyIdentity
                type="win32"
                processorArchitecture="x86"
                name="CSharpCOMDll"
                version="1.0.0.0" />
    <clrClass
                clsid="{4CD39F25-0EB9-4CD0-9B4C-6F5DB5C14805}"
                progid="CSharpCOMDll.COMImplClass1"
                threadingModel="Both"
                name="CSharpCOMDll.COMImplClass1" 
                runtimeVersion="v4.0.30319">
    </clrClass>
    <clrClass
                clsid="{067E5980-0C46-49C7-A8F0-E830877FB29C}"
                progid="CSharpCOMDll.COMImplClass2"
                threadingModel="Both"
                name="CSharpCOMDll.COMImplClass2" 
                runtimeVersion="v4.0.30319">
    </clrClass>
</assembly>

最后,程序集清单由TestDllConsoleApp.manifest dependency条目:

MyCompany.Libs.Set1.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity type="win32" name="MyCompany.Libs.Set1" version="1.0.0.0" processorArchitecture="x86" />
    <file name="CSharpCOMDll.dll"> 
        <comClass
            clsid="{4CD39F25-0EB9-4CD0-9B4C-6F5DB5C14805}"
            threadingModel="Both"
            />
        <comClass
            clsid="{067E5980-0C46-49C7-A8F0-E830877FB29C}"
            threadingModel="Both"
            />
        <comInterfaceProxyStub
            name="ICOMInterface1"
            iid="{6BDAF8DD-B0CF-4CBE-90F5-EA208D5A2BB0}"
            proxyStubClsid32="????"
        />
        <comInterfaceProxyStub
            name="ICOMInterface2"
            iid="{BE69E9C7-1B37-4CA8-A3C1-10BFA9230940}"
            proxyStubClsid32="????"
        />
    </file>
</assembly>

看来我已经完成了一半,但仍然无法诊断实际问题。

目前有两种失败情况(请注意,将托管 COM 服务器 DLL 部署在可执行文件旁边,而不是引用已解析的清单目录,效果很好并且符合预期):

  1. 我完全删除了proxyStubClsid32全局清单中的属性:

    • 启动可执行文件最终出现异常
      EOleSysError: Error in dll, clsid = {4CD39F25-0EB9-4CD0-9B4C-6F5DB5C14805}

    • 调试异常会导致HRESULT value

         Error in the DLL (Exception from HRESULT: 0x800401F9 (CO_E_ERRORINDLL))
      
  2. 我提供一个proxyStubClsid32全局清单中的属性:

    • 我不确定该属性实际需要哪个 GUID。
      正如文档中提到的,它自然似乎是相应的“co 类 ID”(CLSID)如中提到的comClass元素clsid属性。
    • 我也尝试从生成的文件中提供 LIBID GUID,pas文件在那里。

    Both variants leave me with a pretty useless error traceable with the sxstrace tool1:

     ...
     INFORMATION: Manifestdatei ".\install-root\SharedLibs\MyCompany.Libs.Set1\MyCompany.Libs.Set1.MANIFEST" wird analysiert.
        INFORMATION: Die Manifestsdefinitionsidentität ist ",processorArchitecture="x86",type="win32",version="1.0.0.0"".
     FEHLER: Bei der Generierung des Aktivierungskontextes ist ein Fehler aufgetreten.
     Beendet die Generierung des Aktivierungskontextes.
    

    请注意,没有任何简洁的错误/信息消息,例如

      ... cannot resolve assembly XY ...
    

    之前激活上下文生成搞砸了。有大量参考资料表明了这种特定的错误情况。
    还有无处不在的失踪Visual C++ 可再发行框架在这里没有帮助。我从德尔福打电话,情况有所不同。

  3. 另一种尝试参考CSharpCOMDll.dll明确地(可执行清单中的另一个依赖项),然后将其放入SharedLibs已成功创建激活上下文,但失败并出现与以前略有不同的异常

    EOleSysError: Cannot find file, clsid = {4CD39F25-0EB9-4CD0-9B4C-6F5DB5C14805}
    

这里有人知道如何直接做我想做的事情,或者还可以做些什么(除了sxstrace)更深入地诊断问题。

我几乎可以肯定一定可以提供部署像这样。


TL;DR;

  • 是否甚至可以提供如上所述的部署结构,并在引用的可执行文件位置之外维护某些 .NET COM 服务器 DLL?

Update:

今天进一步研究,我意识到(尽管术语非常相似),解决了激活上下文使用私有 SxS 和解析用于 COM 可调用包装器实例化的 .NET DLL 的位置是两种完全不同且独立的机制。我主要是从这两个和更多的张巨峰的 https://blogs.msdn.microsoft.com/junfeng/精彩且深入的解释博客文章:

  • “COM激活、免注册COM激活、COM/.Net互操作、免注册COM/.Net互操作” https://blogs.msdn.microsoft.com/junfeng/2006/04/20/com-activation-registration-free-com-activation-com-net-interop-registration-free-com-net-interop/
  • “免注册 COM/.Net 互操作” https://blogs.msdn.microsoft.com/junfeng/2006/05/17/registration-free-com-net-interop/

定位未注册的 .NET 程序集(托管 COM 服务器 DLL)的问题是,这只发生在应用程序部署目录及其以下目录中。

使用任何方法,例如指定<codebase> or <probing>配置内的元素<runtime>指向目录外部的部分.config文件已部署,但根本不起作用。

I verified that using the Sysinternals Process Monitor and the Fusion log viewer tool2.

我不会将其作为最终答案发布,因为接下来我将尝试以某种方式欺骗 .NET 机制来定位托管 COM 服务器 DLL,使用程序集清单或指定依赖项的本机 DLL 和<probing> / <codebase>元素重定向定位机制。

作为最后的手段(原文如此!),似乎甚至可以提供您自己的定制appDomainManagerAssembly and appDomainManagerType在应用程序配置下<runtime>元素。


更新二:

恐怕我们必须去管理AppDomain我们自己使用来自本机 CLR 主机的 CLR API。

需要进一步调查。我在这里找到了一个很有前景的资源:

“自定义 Microsoft .NET Framework 公共语言运行时” http://flylib.com/books/en/4.331.1/


1) Excuse the German error messages please. I don't have an English version compiler at hand. But the translation given at google should work well.

2) So the question about better tools for diagnosing the problems, can be considered as solved.


  • 是否甚至可以提供如上所述的部署结构,并在引用的可执行文件位置之外维护某些 .NET COM 服务器 DLL?

It's 绝对不可能(!)解析为外部 CLR 托管机制提供的任何程序集AppDomain的可执行目录。

您可以使用

<probing privatePath="<some directory below your executable's location>" />`

But the <probing>标签对于 SxS 解析的工作方式不同(出现在清单下)<windows>tag),以及 CLR 的实例化机制COM 可调用包装器出现在<runtime> tag.


它甚至没有记录,但指定

<windows>
    <probing privatePath="../<xxx>" />
</windows>

用于解决 SxS 依赖关系,支持相对路径<xxx>最多 3 个../可执行文件位置的父目录级别适用于任何本机 COM 服务器, while

<runtime>
    <probing privatePath="../<xxx>" />
    <!--                  ^^^ -->
</runtime>

or

<runtime>
    <codebase href="../<xxx>/xyz.dll" version="1.0.0.0"/>
    <!--            ^^^ -->
</runtime>

不允许您指定指向外部位置的装配位置应用程序域的托管目录使用标准 Windows .NET 机制来解析要实例化的候选者COM 可调用包装器(主办者为mscoreee.dll).
从可执行文件的部署目录深入下去效果很好,并且符合预期。


拦截 CLR 探测机制的一种方法(可能是最简单的)是提供自定义AppDomainManager实施并在<appDomainManagerAssembly> https://learn.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/appdomainmanagerassembly-element and <appDomainManagerType> https://learn.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/appdomainmanagertype-element应用程序配置文件的元素:

 <configuration>
     <runtime>
          <appDomainManagerAssembly value="MyAppDomainMgr" />
          <appDomainManagerType value="MyAppDomainMgr.MyCustomAppDomainMgr, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
     </runtime>
 <configuration>

实施MyAppDomainMgr.MyCustomAppDomainMgr类应该位于 .NET 程序集中,例如用 C# 编写:

namespace MyAppDomainMgr 
{
    [ComVisible(true)]
    public class MyCustomAppDomainMgr : AppDomainManager
    {
        public MyCustomAppDomainMgr()
        {
        }

        public override void InitializeNewDomain(AppDomainSetup appDomainInfo)
        {
            Console.Write("Initialize new domain called:  ");
            Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
            InitializationFlags = 
                AppDomainManagerInitializationOptions.RegisterWithHost;

            // Several ways to control settings of the AppDomainSetup class,
            // or add a delegate for the AppDomain.CurrentDomain.AssemblyResolve 
            // event.
         }
     }
 }

一旦您的非托管应用程序尝试通过 CLR 访问某些 COM 接口(COM Callable Wrapper)(即调用CoCreateInstance()), the MyCustomAppDomainMgr类将被实例化并且InitializeNewDomain()首先调用函数。

侵入性最小的方法似乎是添加该委托函数:

public override void InitializeNewDomain(AppDomainSetup appDomainInfo)
{
    // ...
    AppDomain.CurrentDomain.AssemblyResolve += 
        new ResolveEventHandler(MyCustomAssemblyResolver);
}

static Assembly MyCustomAssemblyResolver(object sender, ResolveEventArgs args) 
{
    // Resolve how to find the requested Assembly using args.Name
    // Assembly.LoadFrom() would be a good way, as soon you found 
    // some matching Assembly manifest or DLL whereever you like to look up for it
}

由此产生的装配体(MyAppDomainMgr.dll),必须放置在非托管可执行应用程序下方。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何提供一个私有并排清单来正确定位 .NET Dll 作为 COM 提供程序? 的相关文章

  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 什么可以解释托管堆上超过 5,000,000 个 System.WeakReference 实例?

    我一直在针对生产 ASP NET Web 应用程序运行负载测试 并且看到在堆上创建了大量 System WeakReference 在大约 15 分钟内 负载管理堆内存已飙升至大约 3GB 并且我有大约 5 000 000 个对 Syste
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问

随机推荐

  • 在 Visual Studio 2017 中生成 .NET Core 控制台应用程序 .exe

    我使用的是 Visual Studio 2017 我启动了一个小型控制台应用程序 我创建了一个 NET Core 应用程序 然后我想构建 exe 文件 但我得到的只是 dll 文件 没有任何 exe 文件 你能帮我吗 我需要在 Visual
  • Mysql从二进制日志读取数据时从master出错1236

    我有 2 个具有主 从配置的 MySql 并且复制失败 MySql Master崩溃了 新的寄存器在mysql bin index被创建 我删除了这个新的寄存器 因为文件系统中不存在该文件 然后MySql Master重启成功 现在 我在从
  • 使 Jackson 子类型可扩展,无需编辑超类型 java 文件

    在我的公司 我们有一个固定的 JSON 消息结构 headerVal1 headerVal2 customPayload payloadType 我想要某种库 它允许我不关心公司定义的消息结构 而只是发送和接收有效负载 我的想法是 将公司模
  • Java如何在Intellij中找到spark、Hadoop和AWS jar

    我正在 Java 中的 IntelliJ 上运行 Spark 应用程序 我已在 pom xml 中添加了 Spark Hadoop 和 AWS 依赖项 但不知何故 AWS 凭证并未加载 我得到的确切错误是Caused by com amaz
  • 如何在Asp.net的图像控件中显示数据库中的图像?

    如何在Asp net的图像控件中显示数据库中的图像 我们必须在asp net页面中显示员工的图像及其详细信息 但问题是如何在asp net图像控件上显示图像 因为图像控件通过属性ImageUrl来拍照 请指导 您可以创建一个 HttpHan
  • 单个 lambda、多个 cloudwatch 日志组

    运行 AWS lambda 后 将填充单个 cloudwatch 日志组 有没有一种方法可以从单个 AWS lambda 填充两个 不同的 cloudwatch 日志组 我搜索了一下但找不到答案 让我知道是否可能 无法从单个 lambda
  • NoReverseMatch at / Reverse for 'post_detail' 未找到关键字参数 '{'pk': ''}'

    我一直在尝试让这个应用程序工作 我运行 python manage py runserver 一切都很好 我能够看到该网站 以超级用户身份登录 发表评论 但是在尝试查看帖子时我开始收到错误 现在 如果我只是访问该网站 就会收到错误消息 我收
  • Javascript/jQuery onclick 不起作用

    我制作了一个 test html 文档来测试脚本 不知怎的 它不起作用 我不明白为什么什么也没有发生 脚本位于 tags 中并用 tag 包裹 CSS 也有它的 tags 为什么它不起作用 这是代码
  • Html 敏捷包帮助

    我正在尝试从网站上抓取一些信息 但找不到适合我的解决方案 我在互联网上读到的每一个代码都会至少产生一个错误 即使他们主页上的示例代码也会给我带来错误 My code HtmlDocument doc new HtmlDocument doc
  • 我可以使 Dialogflow 意图至少需要一个经过训练的实体吗?

    我知道如何使意图需要任何参数值 之后意图将强制获取该值 但有可能让它强制得到atleast给定实体参数之一 您可以为该意图启用 Webhook 实现 如果未提供实体 则重新提示用户至少提供一组实体之一
  • 静态与 Malloc

    与使用 malloc 相比 块作用域中的 static 关键字有什么优势 例如 功能A f static int x 7 功能B f int x malloc sizeof int if x NULL x 7 如果我理解正确的话 这两个程序
  • symfony 5 - 事件未被调度

    当我提交订单时 我使用事件订阅者来处理一些操作 问题是我的事件没有被调度 但是 symfony 能够找到他 因为他告诉我我的 OrderEvent ORDER CREATE 是孤立的 我预计执行会停止die Hello you from s
  • maven项目中的getClass().getResourceAsStream()

    我的 Maven 项目的 pom xml 如下所示
  • BigDecimal stripTrailingZeros 不适用于零

    我的代码中遇到了奇怪的错误 它与 new BigDecimal 1 2300 stripTrailingZeros returns 1 23 正确的 但 new BigDecimal 0 0000 stripTrailingZeros re
  • clojure/ClojureScript 中的字符串化/解析 edn

    在 JavaScript 中 我们可以通过以下方式将 js 数据结构转换为 JSON 字符串 JSON stringify somedata somesubdata 在其他地方 我们可以通过以下方式将其再次解析为 JS 数据结构 var m
  • EditText 的 requestFocus() 不适用于运行 android P (API 28) 的设备

    我在用EditText s接受 OTP 用户重点关注下一步EditText一旦他在字段中输入数字 等等 它在所有设备上都能正常工作 但在运行 android OS P 即 API 28 的设备上 requestFocus 不起作用 并且用户
  • 查找 N 对列表中的日期是否重叠

    给定开始时间和开始时间的列表 我想查找该列表是否包含重叠条目 timesok 9 30 10 00 10 00 10 30 10 30 11 00 wrongtimes1 9 30 10 00 9 00 10 30 10 30 11 00
  • 如何在 JavaScript 中对数组元素进行 JSON 解码?

    我有一个 JavaScript 数组 其中包含一个 URL 如果我尝试简单地将 URL 放入页面中 该数组位于涉及 Yahoo Maps API 的项目中 它会按应有的方式显示 URL 但是 如果我尝试执行重定向或只是对链接数组元素执行 警
  • HealthKit HKAuthorizationStatus 用于读取数据

    我正在使用 HealthKit 来读取某些类型的信息 我特别不要求写入功能 当尝试检测用户是否允许读取某种健康类型时 就会出现问题 我相信执行此操作的预期方法是使用 HKHealthStore 的authorizationStatusFor
  • 如何提供一个私有并排清单来正确定位 .NET Dll 作为 COM 提供程序?

    我正在研究私有注册免费 WinSxS 的配置 并提供简单的程序集清单文件 以便在部署和运行时将 Delphi 可执行文件 COM 客户端 和 NET C COM 可见 DLL 拼接在一起 我已经研究了 MSDN 上提供的文档 与非托管代码互