更新: 2023-09-02 (土)
投稿: 2023-08-21 (月)
[C#] SQLite.Interop.dll が publish した際にもコピーされるようにする
ビルドすると、SQLite.Interop.dll
がコピーされます。
公開(publish)した場合はコピーされないため、コピーされるように設定する方法です。
環境
- .NET 7.0.400
- C# 11.0
- Visual Studio 2022 Version 17.7.1
- Windows 11 Pro 22H2 22621.2134
結果
csproj
に ContentSQLiteInteropFiles
を設定する。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles>
</PropertyGroup>
</Project>
説明
以下のような NuGet をインストールしている場合、
ビルドすると、以下のファイルがコピーされます。
x64\SQLite.Interop.dll
x86\SQLite.Interop.dll
Debug ビルド、Release ビルドではコピーされますが、Publish ではコピーされませんでした。ContentSQLiteInteropFiles
を設定することでコピーできました。
ContentSQLiteInteropFiles
の仕組みを確認してみます。
- NuGet Gallery | Stub.System.Data.SQLite.Core.NetFramework 1.0.118 を開きます。
- ファイルツリーから
build\net46\Stub.System.Data.SQLite.Core.NetFramework.targets
を開きます。 - 53 行目あたりから
ContentSQLiteInteropFiles
が設定されていると、dll がコピーされることが分かります。
<!--
******************************************************************************
** SQLite Interop Library Content Items **
******************************************************************************
-->
<ItemGroup Condition="'$(ContentSQLiteInteropFiles)' != '' And
'$(ContentSQLiteInteropFiles)' != 'false' And
'@(SQLiteInteropFiles)' != ''">
<Content Include="@(SQLiteInteropFiles)">
<Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
感謝
今回の解決方法
- vs2019 16.0.3 publish for deploy sqlite can not find bin/x64 and bin/x86 SQLite.Interop.dll - Developer Community
- c# - Unable to load DLL ‘SQLite.Interop.dll’ - Stack Overflow
関連
関連記事
新着記事