我正在尝试了解如何让.NetCoreApp测试项目引用本地本机程序集,而不是package文件夹中的同一程序集。
我在.NetStandard 1.6库项目中使用Microsoft.Data.Sqlite,要求访问使用RSA加密的数据库,这几乎不受支持。该库将由.Net Framework 4.7 WinForms可执行文件和.NetCoreApp网站使用。
我可以通过添加nuget包“Microsoft.Data.Sqlite.Core”“SQLitePCLRaw.bundle_e_sqlite3”在.Net Framework中完成这项工作。将x86 \ SQLite.Interop.dll复制到bin文件夹中的x86 \ e_sqlite3.dll,并调用Batteries.Init()。
对于.NetCoreApp,我将x86 \ SQLite.Interop.dll复制到runtimes \ win7-x86 \ native \ e_sqlite3.dll,但只有在从.nuget \ packages \ sqlitepclraw.lib中删除匹配版本时才会引用此程序集。 e_sqlite3.v110_xp \ 1.1.5 \运行时\ WIN7 86 \天然
有没有人知道如何让它使用本地程序集优先于packages文件夹中的程序集?
答案 0 :(得分:0)
我们通过将库添加到始终是目标的nuget来解决这个问题。我更喜欢用直接引用来初始开发库。
我希望更好地了解如何发现本机程序集,但这是一个极端情况。
答案 1 :(得分:0)
你必须原谅我,我在大约18个月内没有看过这个问题,但是nuspec文件如下所示。需要一些时间才能使目标正确,这样才能对.Net Framework和.Net Core起作用。这显然只适用于Windows。
<package>
<metadata>
<id>$id$</id>
<version>$version$</version>
<authors>$authors$</authors>
<owners>$authors$</owners>
<description>$description$</description>
<id>MyCompany.SqlLite.Portable</id>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<dependencies>
<group targetFramework=".NETStandard1.6">
<dependency id="NETStandard.Library" version="1.6.1" exclude="Build,Analyzers" />
<dependency id="Microsoft.Data.Sqlite.Core" version="2.0.0-preview1-final" exclude="Build,Analyzers" />
<dependency id="SQLitePCLRaw.bundle_e_sqlite3" version="1.1.5" exclude="Build,Analyzers" />
<dependency id="System.ServiceModel.Http" version="4.3.0" exclude="Build,Analyzers" />
<dependency id="System.ServiceModel.Security" version="4.3.0" exclude="Build,Analyzers" />
</group>
</dependencies>
</metadata>
<files>
<file src="$output$\**\*.dll" target="lib\" />
<file src="x64\SQLite.Interop.dll" target="content\x64\e_sqlite3.dll"/>
<file src="x86\SQLite.Interop.dll" target="content\x86\e_sqlite3.dll"/>
<file src="x64\SQLite.Interop.dll" target="runtimes\win7-x64\native\e_sqlite3.dll"/>
<file src="x86\SQLite.Interop.dll" target="runtimes\win7-x86\native\e_sqlite3.dll"/>
</files>
</package>