Visual Studio C#MSBuild.ILMerge.Task程序集的问题未标记为仅包含托管代码

Visual Studio C#MSBuild.ILMerge.Task程序集的问题未标记为仅包含托管代码,c#,visual-studio,msbuild,visual-studio-2017,C#,Visual Studio,Msbuild,Visual Studio 2017,我有两个项目的解决方案,如: MainDLL 图书馆动态链接库 我想将LibraryDLL合并到MainDLL中。我的应用程序只需要导入一个文件作为插件。 我下载了NUGet Packaged: 伊尔梅 MSBuild.ILMerge.Task 设置后,当我按build时,我收到以下错误: ILMerge.Merge: The assembly 'ChilkatDotNet4' is not marked as containing only managed code. (Conside

我有两个项目的解决方案,如:

  • MainDLL
  • 图书馆动态链接库
我想将LibraryDLL合并到MainDLL中。我的应用程序只需要导入一个文件作为插件。 我下载了NUGet Packaged:

  • 伊尔梅
  • MSBuild.ILMerge.Task
设置后,当我按build时,我收到以下错误:

ILMerge.Merge: The assembly 'ChilkatDotNet4' is not marked as containing only managed code.
(Consider using the /zeroPeKind option -- but read the documentation first!)
我并没有直接使用它,也不需要它,但它可能被两个项目中的其他引用dll引用(我不需要包括它,因为应用程序已经有了它)。 如何避免这个问题? 我已尝试设置标志:

<!-- See ILMerge documentation -->
<ILMergeAllowZeroPeKind></ILMergeAllowZeroPeKind>

对或错,但没有任何改变

Visual Studio C#MSBuild.ILMerge.Task程序集的问题不存在 标记为仅包含托管代码

我认为您的<>强> LabyDLL>强>是C++原生动态库项目,ILGIN不能用包含本机代码的程序集处理。 您必须在使用前在运行时提取dll,或者发送dll

建议

1)我认为您已经编写了预生成事件或后生成事件来运行此命令,因此请在您的命令中添加
/zeroPeKind

例如
ilmerge/target:xxxx/zeroPeKind/out:xxxxx xxxxxxxx


2)此外,您还可以尝试解决您的问题。

使用/zeroPeKind对我来说是不成功的(并不意味着它是错误的方式)。 我也不能重建这个本地C++库,因为它来自外部提供者。 检查后

合并程序集,其中Copy Local=True

我已更改所有其他引用属性设置 将本地复制为false


我将Copy Local=true仅用于引用我的共享项目库,我想将其与主项目合并。

还有其他选项吗?我没有那些C++项目的外部LIB吗?我认为你的图书馆DLL是C++本地库项目。很抱歉,我没有详细描述它。您可以在预构建事件中添加
/zeroPeKind
,我想您可以在其中运行
ilmerge.exe
。例如
ilmerge.exe/target:xxxx/zeroPeKind………..
嗨,这个问题有更新吗?