Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在类库project.json中使用发布选项?_C#_Dll_Asp.net Core - Fatal编程技术网

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

C# 如何在类库project.json中使用发布选项?,c#,dll,asp.net-core,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"

我有外部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: 我找到了,但仍然不工作。 我不知道如何使用nuget包,但如果可能的话,我希望避免使用nuget

编辑2: 类似于,但在核心类库中

编辑3 我试过:

"copyToOutput": {
  "include": [ "MyExternal.dll" ]
}
仍然没有成功

编辑4 我创建了最小解决方案(.NET core-visual studio 2015)。你可以到这里:

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


如果将此dll添加到C:\Windows\System32,则说明它正在工作。

不幸的是,
copyToOutput
project.json
中不可传递。有关更多详细信息,请参阅。这可能会随着转换回MSBuild而得到修复,但目前我们必须手动管理这些依赖项

由于我们无法将
copyToOutput
的资源从类库传递到MyApp,因此我们必须告诉MyApp在哪里可以找到
.dll
,以及在哪里可以放置它。由于我们希望将
.dll
与类库一起分发,这意味着MyApp必须使用相对路径来获取它。在这里,我们可以利用
copyToOutput
中的
mappings
对象,这使我们能够控制从何处获取文件以及将文件放在何处。如果您尝试使用
包含
而不是
映射
,您将得到
.dll
所在的整个文件夹结构

将此添加到MyApp的
project.json中的
buildOptions
publishOptions

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

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

外部dll是本地复制到dll/exe所在的位置吗?我还以为是dll/exe所在的位置。但是现在我找不到了。因此,我不知道它是。如果它不在dll/exe旁边,则在导入它时将无法找到它,因此不会创建包含此本机dll的包,并使其成为使用它的包的依赖项。确保包含本机dll的包具有正确的结构。我不久前写了一篇关于这个的博文:。虽然我在dnx的日子里写过,但大部分内容仍然适用(项目参考除外)