Я пишу программу на C #, которая использует SQLite и Excel. Естественно, мне нужны System.Data.SQLite.dll и Microsoft.Office.Interop.Excel.dll. Я хочу, чтобы моя программа была одним exe, поэтому я хочу связать эти DLL в сборке. Это мой файл .csproj:
<Project DefaultTargets="Compile"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<appname>AppName</appname>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
</PropertyGroup>
<ItemGroup>
<CSFile Include="*.cs"/>
</ItemGroup>
<ItemGroup>
<DLLResource Include="System.Data.SQLite.dll"/>
<DLLResource Include="Microsoft.Office.Interop.Excel.dll"/>
<DLLReference Include="System.Data.SQLite.dll"/>
<DLLReference Include="Microsoft.Office.Interop.Excel.dll"/>
</ItemGroup>
<ItemGroup>
<BundledResource Include="std_db_build.xml"/>
<BundledResource Include="std_report_make.xml"/>
</ItemGroup>
<Target Name="Compile">
<CSC
Sources="@(CSFile)"
Resources="@(DLLResource);@(BundledResource)"
References="@(DLLReference)"
OutputAssembly="$(appname).exe">
</CSC>
</Target>
<Target Name="Run">
<Exec Command="start $(COMSPEC) /k "$(PathTo)$(appname).exe & pause>null & exit"" />
</Target>
<Target Name="Clean">
<Delete Files="$(appname).exe"/>
</Target>
</Project>
Теперь, это нормально работает для System.Data.SQLite.dll - после сборки программы моей программе не требуется, чтобы DLL находилась в той же папке для работы. Однако для исполняемого файла требуется, чтобы файл Microsoft.Office.Interop.Excel.dll находился в той же папке, хотя я связал его так же, как и System.Data.SQLite.dll.
Теперь я знаю, что Microsot.Office.Interop.Excel.dll находится внутри сборки, поскольку он увеличивает размер файла с 928 КБ до 1952 КБ - добавление 1024 КБ, что в точности соответствует размеру Microseft.Office.Interop. Excel.dll. Поэтому я предполагаю, что, хотя DLL находится внутри сборки, некоторая часть программы все равно ищет ее как отдельный файл.
Итак, что я делаю не так? И как я могу это исправить?