使用Excel DNA c#创建的打包Excel Addin无法正常工作

时间:2014-08-08 12:16:50

标签: c# excel excel-dna

我使用Excel DNA c#创建了一个AddIn。 一切正常。 我在.dna文件中打包了所需的dll我的dna文件如下

 <DnaLibrary RuntimeVersion="v4.0" Language="C#">    
  <ExternalLibrary Path="ExcelAddInClient.dll" Pack="true"/>
  <ExternalLibrary Path="Newtonsoft.Json.dll" Pack="true"/>
  <ExternalLibrary Path="System.Net.Http.Formatting.dll" Pack="true"/>
  <ExternalLibrary Path="AuthenticationDll.dll" Pack="true"/>
 </DnaLibrary>

当我双击Release文件夹中的打包文件时,它工作正常。但是如果我将该xll文件复制到其他位置则无法正常工作。它不显示任何错误,但它也没有显示所需的输出。 我不知道为什么???

4 个答案:

答案 0 :(得分:4)

只能使用.dna文件中的ExternalLibrary标记引用Excel加载项程序集。

所有其他程序集应使用Reference

E.g。

<DnaLibrary RuntimeVersion="v4.0" Language="C#">    
  <ExternalLibrary Path="ExcelAddInClient.dll" Pack="true"/>
  <Reference Path="Newtonsoft.Json.dll" Pack="true"/>
  <Reference Path="System.Net.Http.Formatting.dll" Pack="true"/>
  <Reference Path="AuthenticationDll.dll" Pack="true"/>
</DnaLibrary>

答案 1 :(得分:2)

您可能遗漏了一些dll或其他必要文件。查看release文件夹,看看还有什么。

您可以尝试将所有其他文件与打包的xll一起复制,然后一次删除其他文件以查看哪些文件是必需的。然后将这些额外的必要文件添加到dna文件中。

另外,你知道你可以调试到Excel吗?从Visual Studio使用“Debug”/“Attach to Process”,然后连接到Excel。然后从Excel中打开xll。这有望向您显示错误。

答案 2 :(得分:1)

正如Mark所说,你可能错过了一些你的dll,或者它们没有包含在包装中。 我发现如果事情没有按预期工作,你真的需要注意构建命令的输出。

dll需要存在,并在部署机器上注册,或者需要包含在Visual Studio输出目录中,以便打包包含它们。如果找不到它们,它不会向Visual Studio标记任何错误,它只是在输出窗口中告诉它。

答案 3 :(得分:1)

就我而言,我通过查看编译步骤的输出来解决问题。

View..Output应该没有明显的错误。这应该是它的样子:

1>------ Build started: Project: ExcelDNA2, Configuration: Release Any CPU ------
1>  ExcelDNA2 -> H:\Test\Docs\SpecsProofOfConcept\ExcelDNA2\bin\Release\ExcelDNA2.dll
1>  H:\Test\Docs\SpecsProofOfConcept\\packages\ExcelDna.AddIn.0.33.9\tools\ExcelDna.xll
1>  1 File(s) copied
1>  H:\Test\Docs\SpecsProofOfConcept\ExcelDNA2\bin\Release\ExcelDNA2-AddIn.dna
1>  1 File(s) copied
1>  H:\Test\Docs\SpecsProofOfConcept\\packages\ExcelDna.AddIn.0.33.9\tools\ExcelDna64.xll
1>  1 File(s) copied
1>  Using base add-in H:\Test\Docs\SpecsProofOfConcept\ExcelDNA2\bin\Release\ExcelDNA2-AddIn.xll
1>    ->  Updating resource: Type: ASSEMBLY_LZMA, Name: EXCELDNA.INTEGRATION, Length: 63672
1>    ~~> ExternalLibrary path ExcelDNA2.dll resolved to H:\Test\Docs\SpecsProofOfConcept\ExcelDNA2\bin\Release\ExcelDNA2.dll.
1>    ->  Updating resource: Type: ASSEMBLY_LZMA, Name: EXCELDNA2, Length: 1605
1>    ->  Updating resource: Type: DNA, Name: __MAIN__, Length: 417
1>  Completed Packing H:\Test\Docs\SpecsProofOfConcept\ExcelDNA2\bin\Release\ExcelDNA2-AddIn-packed.xll.
1>  Using base add-in H:\Test\Docs\SpecsProofOfConcept\ExcelDNA2\bin\Release\ExcelDNA2-AddIn64.xll
1>    ->  Updating resource: Type: ASSEMBLY_LZMA, Name: EXCELDNA.INTEGRATION, Length: 63672
1>    ~~> ExternalLibrary path ExcelDNA2.dll resolved to H:\Test\Docs\SpecsProofOfConcept\ExcelDNA2\bin\Release\ExcelDNA2.dll.
1>    ->  Updating resource: Type: ASSEMBLY_LZMA, Name: EXCELDNA2, Length: 1605
1>    ->  Updating resource: Type: DNA, Name: __MAIN__, Length: 417
1>  Completed Packing H:\Test\Docs\SpecsProofOfConcept\ExcelDNA2\bin\Release\ExcelDNA2-AddIn64-packed.xll.
1>  H:\Test\Docs\SpecsProofOfConcept\ExcelDNA2\bin\Release\ExcelDNA2-AddIn64.dna
1>  1 File(s) copied
1>  H:\Test\Docs\SpecsProofOfConcept\ExcelDNA2\bin\Release\ExcelDNA2-AddIn64.xll
1>  1 File(s) copied
========== Build: 1 succeeded, 0 failed, 15 up-to-date, 0 skipped ==========

就我而言,它在构建输出中打印了许多null reference个异常。

事实证明我创建了console应用程序而不是class library,并且在添加NuGet包时,它创建了指向.dna的{​​{1}}文件而不是ExcelDNSA2.exe

解决这个问题,一切都像魅力一样。