我们有一堆旧的dll(基本上可以是任何东西,有些是旧的fortran,有些是.NET),我们希望将它们移动到Azure Artifacts。我可以自己从这些不基于.NET的旧版dll(例如Fortran包)中创建NuGet程序包。
我已经尝试创建NuGet程序包,但是由于依赖项看起来像他们正在尝试在.NET框架上加载程序包一样,我会收到警告。唯一真正的解决方法是建立一个.NET类库之类的东西,然后通过它引用dll,并使用该库创建一个NuGet包,然后仅将旧dll添加为引用?
答案 0 :(得分:0)
我可以使用不在.NET Framework上的旧版dll创建NuGet软件包(或其他软件包)吗?
答案是肯定的。
您可以将那些旧版dll定位到tools文件夹而不是lib文件夹。喜欢:
<files>
<file src="legacy\*.dll" target="Tools" />
<!-- Other files -->
</files>
然后在构建管道时打包此.nuspec
文件,这些旧的dll位于tools
文件夹中,不会添加为引用。
检查From a convention-based working directory以获得一些详细信息。
希望这会有所帮助。
答案 1 :(得分:0)
我假设您的意思是您的托管代码使用DllImport
属性来调用本机代码,在.NET生态系统中,本机代码称为平台调用或P / Invoke。我之所以这样说是因为,如果您用Google搜索P / Invoke和nuget的术语,那么可能会更幸运地发现existint堆栈溢出问题,博客文章等。因此,尝试找出您使用的功能的正式名称或常用名称非常有用,这样您便知道要搜索的内容。不幸的是,我认为NuGet团队目前没有关于这种情况的任何文档。
SDK风格的项目支持软件包中的runtime\
目录,尽管我认为这也没有记载。我不了解使用PackageReference
(PR)的传统项目,但是packages.config
(PC)绝对不支持runtimes\
。对于PC项目,程序包作者通常(总是?)包括build targets,以便在构建后复制本机程序集。在软件包中,本机dll位于其他位置,通常作者将它们放在目标旁边的build
目录中,但是我想我也看到了目标从runtime
目录中复制的内容,因此软件包同时支持PC和SDK样式的项目。
我建议您尝试考虑一些具有.NET绑定的常用本机库,并查看包的工作方式({nupkg
仅重命名为zip
)。我的猜测是sqlite或curl,或者asp.net core的kestrel Web服务器如何捆绑libuv(或者如果不再使用,则在较早版本中也是如此)。我目前正在休假,所以没有动力去深入自己。