C# 如何在类库project.json中使用发布选项?
我有外部dll,我想包括到项目中。 我不能把这个DLL作为标准库(它是C++ DLL)添加。 我正在使用DllImport作为外部dllC# 如何在类库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"
[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的日子里写过,但大部分内容仍然适用(项目参考除外)