Пакет Microsoft.Office.Interop.Excel.dll как ресурс не работает - PullRequest
1 голос
/ 21 июня 2011

Я пишу программу на 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 &quot;$(PathTo)$(appname).exe &amp; pause>null &amp; exit&quot;" />
</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 находится внутри сборки, некоторая часть программы все равно ищет ее как отдельный файл.

Итак, что я делаю не так? И как я могу это исправить?

1 Ответ

0 голосов
/ 21 июня 2011

Возможно исключить необходимость сборки Interop.Это может быть лучшим выбором.

Эта статья на MSDN должна помочь.

Вкратце:

Выберите ссылку для своей библиотеки взаимодействия.В окне «Свойства» убедитесь, что для свойства «Встроить типы взаимодействия» установлено значение «Истина».

...