如何在类库project.json中使用发布选项?

时间:2016-12-05 09:39:49

标签: c# dll asp.net-core

我想要包含在项目中的外部dll。 我无法将此dll添加为标准库(它是c ++ dll)。

我正在使用DllImport作为外部DLL。

[DllImport("MyExternal.dll")]
public static extern UInt32 Authent([Out] UInt32[] LibRandNum);

如果我在主项目中包含dll,这是有效的:

 "publishOptions": {
    "include": [
      "MyExternal.dll"
    ]
  }

但它不能在类libaray中工作(类库project.json文件中的发布选项相同)。

如果我将dll添加到" C:\ windows \ system32"而不是它的工作。但是我不想假设dll存在,我想从项目库中添加dll。

编辑1:

我找到了"How to use native dependencies",但仍然无法正常工作。 我不知道怎么用nuget包来做,但我想尽可能避免nuget。

编辑2:

类似于this,但在Core类库中。

编辑3

我试过了:

"copyToOutput": {
  "include": [ "MyExternal.dll" ]
}

仍然没有成功。

编辑4

我创建了最小的解决方案(.NET核心 - visual studio 2015)。你可以到这里:http://www.filedropper.com/myapp_1

类库(SGLW64.dll)中有dll文件

如果将此dll添加到C:\ Windows \ System32而不是它正在运行。

1 个答案:

答案 0 :(得分:1)

不幸的是,copyToOutput中的project.json不具有传递性。有关详细信息,请参阅GitHub Issue。这可能会通过转换回MSBuild来解决,但是现在我们必须手动管理这些依赖项。

由于我们无法将copyToOutput'资源从ClassLibrary传递到MyApp,我们必须告诉MyApp在哪里找到.dll以及放置它的位置。由于我们希望使用ClassLibrary分发.dll,这意味着MyApp必须使用相对路径来获取它。在这里,我们可以利用mappings中的copyToOutput对象,这使我们可以控制从哪里获取文件以及放置文件的位置。如果您尝试使用include代替mappings,则最终会获得.dll所在的整个文件夹结构。

将此内容添加到MyApp buildOptions中的publishOptionsproject.json

"copyToOutput": {
   "mappings" : {
      "SGLW64.dll": "../ClassLibrary/SGLW64.dll"
   }
}

虽然MyApp必须通过手动复制其.dll来“了解”ClassLibrary的内部实现细节并不是很好,但这是我们需要做出的妥协,直到我们回到MSBuild。

相关问题