我使用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文件复制到其他位置则无法正常工作。它不显示任何错误,但它也没有显示所需的输出。 我不知道为什么???
答案 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
。
解决这个问题,一切都像魅力一样。