如何在 ColdFusion 中使用 C#.NET 程序集?

Posted

技术标签:

【中文标题】如何在 ColdFusion 中使用 C#.NET 程序集?【英文标题】:How can I use C#.NET assemblies in ColdFusion? 【发布时间】:2020-08-19 11:10:44 【问题描述】:

我的公司有一个用 ColdFusion 编写的 Web 应用程序,我正在尝试集成一个用 C#.Net 编写的 API。我对.Net 开发还很陌生,所以我可能对术语不太了解。我创建了一个非常简单的 C# 类来使用 ColdFusion 进行测试,定义如下:

namespace FIX

    public class IntegersTest
    
        public int Add(int n, int m)
        
            return n + m;
        
    

我能够构建这个类并输出一个 .dll (FIX.dll)。现在我使用以下代码创建一个 ColdFusion 文件:

<cfobject type="dotnet" class="FIX.IntegerTest" name="math" action="create"
    assembly="C:\path\to\file\FIX.dll">

当我尝试运行它时,我收到以下错误:

Class FIX.IntegerTest not found in the specified assembly list.
The assembly that contains the class must be provided to the assembly attribute. 

在 dotnet 错误日志中,我看到“正在中止代理生成,因为在依赖类列表中未找到任何类。这可能意味着程序集中不存在类 FIX.IntegerTest。”

我已尝试重新安装 ColdFusion .Net 服务以及 ColdFusion 本身。我尝试以 .Net Framework 3.0 为目标并重新构建该类。我已经为 cfobject 标记的类属性尝试了多种变体。我不太确定还能做什么。

需要注意的是,下面的ColdFusion代码没有报错:

<cfobject type="dotnet" name="sidiClass" class="System.IO.DriveInfo">

我正在使用 Visual Studio 2019、ColdFusion 2018,并将我的测试项目的目标框架设置为 .NET 4.7.2。任何和所有输入将不胜感激!谢谢。

编辑 正如@Ageax 所指出的那样,我刚刚打错了字,但是即使我确保拼写正确,我还是在另一堂课上得到了这个。答案是目标框架。 ColdFusion 不喜欢我的目标是 .Net Framework 3.0(由于某种原因,第二个项目不允许我切换到 4.0+)。我用正确的目标框架创建了一个新项目,一切似乎都在工作!

【问题讨论】:

CF 代码有错误的类名,“IntegerTest”(单数)而不是“IntegersTest”(复数)。该名称必须与 C# 类 public class IntegersTest 中定义的名称匹配。不过,第一个问题研究得很好。 啊,有点尴尬。感谢您对此的第二次关注和称赞!我遇到了同样的问题,我肯定检查过拼写,所以我没想过要检查这个。 呵呵.. 有时也会发生在我身上。由于您还发现了错误的另一个原因(框架版本),您应该将其发布为答案,而不是编辑。这使得下一个遇到相同问题的人更容易找到解决方案。 (允许在 SO 上回答您自己的问题。) 【参考方案1】:

正如@Ageax 所指出的,我刚刚打错了字,但即使我确保拼写正确,我还是在另一堂课上得到了这个。答案是目标框架。 ColdFusion 不喜欢我的目标是 .Net Framework 3.0(由于某种原因,第二个项目不允许我切换到 4.0+)。我创建了一个具有适当目标框架(4.7.2)的新项目,一切似乎都在工作!

【讨论】:

以上是关于如何在 ColdFusion 中使用 C#.NET 程序集?的主要内容,如果未能解决你的问题,请参考以下文章

如何让Coldfusion 10在Windows 10中与IIS 10一起使用

如何使用 ColdFusion 进行 AS3 远程处理

ColdFusion .Net 集成错误:未安装 DotNetExtension

将非 .NET DLL 添加到 ColdFusion

如何在自定义 ColdFusion 日志文件中获得新行?

从coldfusion调用.net对象上的方法