[C#] SQLite.Interop.dll が publish した際にもコピーされるようにする

更新: 2023-09-02 (土) 投稿: 2023-08-21 (月)

ビルドすると、SQLite.Interop.dll がコピーされます。
公開(publish)した場合はコピーされないため、コピーされるように設定する方法です。

環境

  • .NET 7.0.400
  • C# 11.0
  • Visual Studio 2022 Version 17.7.1
  • Windows 11 Pro 22H2 22621.2134

結果

csprojContentSQLiteInteropFiles を設定する。

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

感謝

今回の解決方法

関連

更新: 2023-09-02 (土) 投稿: 2023-08-21 (月)