C# 已打包的Excel加载项无法使用Excel DNA c创建#

C# 已打包的Excel加载项无法使用Excel DNA c创建#,c#,excel,excel-dna,C#,Excel,Excel Dna,我有一个使用Excel DNA c#创建的加载项。 一切正常。 我已将所需的dll打包到.dna文件中。我的dna文件如下 <DnaLibrary RuntimeVersion="v4.0" Language="C#"> <ExternalLibrary Path="ExcelAddInClient.dll" Pack="true"/> <ExternalLibrary Path="Newtonsoft.Json.dll" Pack="true"/

我有一个使用Excel DNA c#创建的加载项。 一切正常。 我已将所需的dll打包到.dna文件中。我的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文件复制到其他位置,它将不工作。它不会显示任何错误,但也不会显示所需的输出。
我不明白为什么???

您可能缺少一些DLL或其他必要的文件。查看发布文件夹,看看还有什么

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


另外,您知道可以调试到Excel吗?使用Visual Studio中的“调试”/“附加到进程”,然后连接到Excel。然后从Excel中打开xll。这将有望向您显示错误。

正如Mark所述,您可能丢失了一些DLL,或者它们没有包含在打包中。 我发现,如果事情没有按预期进行,您确实需要注意构建命令的输出


DLL需要存在并在部署计算机上注册,或者需要包含在Visual Studio输出目录中,以便打包包含它们。如果找不到它们,它不会将任何错误标记到Visual Studio,它只会在输出窗口中告知这些错误。

应使用.dna文件中的
ExternalLibrary
标记仅引用Excel加载项程序集

所有其他组件应使用
参考

例如


在我的例子中,我通过查看编译步骤的输出解决了这个问题

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引用
异常

事实证明,我创建了一个
控制台
应用程序,而不是
类库
,当添加NuGet包时,它创建了指向
ExcelDNSA2.exe
.dna
文件,而不是
ExcelDNSA2.dll

修好这个,一切都会很顺利

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