如何提供一个私有并排清单来正确定位 .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 提供程序? 的相关文章

  • 地图类容器的专用功能

    我想要专门为矢量和地图之类的容器设计一个函数模板 对于向量 我可以像下面那样做 但我不知道如何才能有一个专门版本的函数 该函数仅用于像地图这样的容器 include
  • MVVM:来自 FileOpenPicker 的图像绑定源

    我将 OnActivated 添加到 app xaml cs 中 它可以正常工作 protected async override void OnActivated IActivatedEventArgs args var continua
  • 没有配置身份验证处理程序来处理该方案

    这是一个非常烦人的问题 我在我的 asp net core 项目上设置 cookie 身份验证 有时会出现此错误 有时不会 没有图案 它只是开始抛出错误 然后突然停止 然后再次开始 例外情况是 InvalidOperationExcepti
  • 图片框、双击和单击事件

    我有一个奇怪的问题 我有一个图片框双击事件以及单击事件 问题是即使我双击该控件 也会引发单击事件 如果我禁用单击事件 则双击事件正在工作 这个问题已经在这里讨论过 https stackoverflow com questions 1830
  • MVC BaseController 处理 CRUD 操作

    我想重构我的基本 CRUD 操作 因为它们非常重复 但我不确定最好的方法 我的所有控制器都继承 BaseController 如下所示 public class BaseController
  • 在编译输出中添加程序集绑定 (app.config)

    如果我编译应用程序 则会在输出中自动添加程序集绑定 具体的程序集绑定不在app config在 Visual Studio 中但在创建的应用程序配置中 有什么办法可以检查为什么会自动添加程序集绑定吗 选项AutoGenerateBindin
  • 我的 32 位和 64 位 COM 组件可以同时驻留在同一台计算机上吗?

    我有一个 32 位 COM 组件 主要由 ASP 使用 我们也有 64 位版本 64 位版本在功能上是相同的 并且也使用相同的 ProgID 据我所知 相同的 CLSID 等 我可以在与 32 位版本相同的计算机上安装 regsvr 64
  • 如何在 C++11 中返回类成员向量

    我读了几篇关于如何从方法返回向量的文章 其中包括 c11 右值和移动语义混淆返回语句 https stackoverflow com questions 4986673 c11 rvalues and move semantics conf
  • 将两个垂直滚动条相互绑定

    我在控件中有两个 TextBox 并且它们都有两个 VerticalScrollBar 我想在它们之间绑定 VerticalScrollBars 如果一个向上 第二个也会向上等等 如果可以的话我该怎么做 Thanks 不是真正的绑定 但它有
  • 我想找到 C# 代码中所有后面没有括号的 if 语句。通过正则表达式

    我想找到所有if声明和for后面没有大括号的语句 当你在一个文件中写入一行时if声明您大多不会将其括在大括号中 所以我想找到所有这些if and for声明 请帮忙 就像我想捕捉这个声明 if childNode Name B return
  • 将 JavaScript 引擎嵌入到 .NET 中 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 只是想知道是否有人尝试过将任何 js 引擎嵌入并实际集成到 net 环境中 我可以找到并实际使用 经过L
  • C 编程中的 rand() 问题? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么我总是用 rand 得到相同的随机数序列 https stackoverflow com questions 1108780 why do i always get the same seque
  • 对象变空似乎是 Hangfire 中的反序列化问题

    Hangfire 似乎无法反序列化我的原始版本Scheduler对象及其所有状态 我正在调用其 Execute 方法BackgroundJob Enqueue 如下所示 Scheduler new FileInFileOut FileIn
  • 对列表中的一系列整数求和

    假设我有一个这样的列表 List
  • 如何通过分解 y 轴来减小 mschart 的高度

    如何降低 mschart 的高度 如下所示 编辑 就我而言 我不想查看中断图表 this chart1 ChartAreas 0 AxisY ScaleBreakStyle Enabled false 您似乎正在寻找AxisY ScaleB
  • 如何处理文件名中的空格

    我正在尝试迭代本地目录中的文件 foreach string name in Directory GetFileSystemEntries path FileAttrtibutes att File GetAttributes name 文
  • 在 C 中运行 setuid 程序的正确方法

    我有一个权限为4750的进程 我的Linux系统中存在两个用户 root 用户和 appz 用户 该进程继承以 appz 用户身份运行的进程管理器的权限 我有两个基本惯例 void do root void int status statu
  • 在for循环中声明和初始化变量

    可以简单写一下吗 for int i 0 代替 int i for i 0 在 C 或 C 中 并且会变量i只能在循环内部访问 它在 C 中有效 它在 C 的原始版本中是不合法的 但在 C99 中被采用为 C 的一部分 当时一些 C 功能被
  • C# 使用 .Equals() 比较两个 double

    我使用 ReShaper 当我用 比较两个双精度值时 它建议我应该使用 Math 具有公差的 ABS 方法 看 https www jetbrains com help resharper 2016 2 CompareOfFloatsByE
  • Web 和 winforms 的 .Net 身份验证

    我有一个为客户端构建的 ASP NET Web 应用程序 它使用默认的 ASP NET 表单身份验证 他们现在请求一个能够 与 Web 应用程序一起工作的桌面 WinForms 应用程序 我已经创建了 Web 服务来访问他们想要从 Web

随机推荐

  • 在 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 上提供的文档 与非托管代码互