我想要包含在项目中的外部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。
我找到了"How to use native dependencies",但仍然无法正常工作。 我不知道怎么用nuget包来做,但我想尽可能避免nuget。
类似于this,但在Core类库中。
我试过了:
"copyToOutput": {
"include": [ "MyExternal.dll" ]
}
仍然没有成功。
我创建了最小的解决方案(.NET核心 - visual studio 2015)。你可以到这里:http://www.filedropper.com/myapp_1
类库(SGLW64.dll)中有dll文件
如果将此dll添加到C:\ Windows \ System32而不是它正在运行。
答案 0 :(得分:1)
不幸的是,copyToOutput
中的project.json
不具有传递性。有关详细信息,请参阅GitHub Issue。这可能会通过转换回MSBuild来解决,但是现在我们必须手动管理这些依赖项。
由于我们无法将copyToOutput
'资源从ClassLibrary传递到MyApp,我们必须告诉MyApp在哪里找到.dll
以及放置它的位置。由于我们希望使用ClassLibrary分发.dll
,这意味着MyApp必须使用相对路径来获取它。在这里,我们可以利用mappings
中的copyToOutput
对象,这使我们可以控制从哪里获取文件以及放置文件的位置。如果您尝试使用include
代替mappings
,则最终会获得.dll
所在的整个文件夹结构。
将此内容添加到MyApp buildOptions
中的publishOptions
和project.json
:
"copyToOutput": {
"mappings" : {
"SGLW64.dll": "../ClassLibrary/SGLW64.dll"
}
}
虽然MyApp必须通过手动复制其.dll
来“了解”ClassLibrary的内部实现细节并不是很好,但这是我们需要做出的妥协,直到我们回到MSBuild。