捆绑Microsoft.Office.Interop.Excel.dll作为无法正常工作的资源

时间:2011-06-21 13:16:34

标签: c# .net excel dll interop

我正在编写一个使用SQLite和Excel的C#程序。当然,我需要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在程序集内部,因为它将文件大小从928k增加到1952k - 增加了1024k,这正是Microseft.Office.Interop的大小。 Excel.dll。所以我假设即使DLL在程序集中,程序的某些部分仍然将其作为单独的文件查找。

那么,我做错了什么?我该如何解决?

1 个答案:

答案 0 :(得分:0)

可以消除对Interop组件的需求。这可能是你最好的选择。

MSDN上的这个article应该会有所帮助。

简而言之:

选择Interop库的参考。在“属性”窗口中,确保“嵌入互操作类型”属性设置为“True”。