本地替换.NetCoreApp项目使用的本机程序集

时间:2017-05-18 08:11:09

标签: c# sqlite .net-core .net-assembly

我正在尝试了解如何让.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文件夹中的程序集?

2 个答案:

答案 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>