在Silverlight项目中引用ASP.NET C#类/方法

5

有人知道怎么做吗?我在asp.net中构建了一个后端c#类,但想要在不重新创建它们的情况下访问这些相同的类。这是可能的吗?

4个回答

4
您可以将cs文件添加为链接到您的项目中进行重复使用。在您的项目上右键单击,并选择Add Existing...浏览到您的文件,然后在打开按钮上,使用右侧的下拉箭头来选择Add As Link。然后您将看到该文件被添加到您的项目中,并且其图标上覆盖有小型Windows快捷方式图标。

请记住 - ASP.Net 运行于 .Net 运行时环境上。而 Silverlight 则运行于 CoreCLR (Silverlight 运行时环境) 上。并不是所有在一个环境下编译通过的内容,在另一个环境下也一定能编译通过。
为了更好地进行分离,您可以使用 #if 指令,也可以使用 Partial Classes 和 Partial Methods(仅添加在服务器端或客户端上运行的内容)。

那么,这是否意味着在Silverlight项目中构建一个完全相同的类几乎更加明智,因为没有确定一切都会编译成功? - locoboy
2
@cfarm45:最聪明的方法几乎总是代码最少的方法。如果您重构域类,使其不依赖于asp.net,则可以重复使用它们。复制代码始终是备选方案B。 - user180326
@jdv 好的,我会看看我能做什么。 - locoboy

2

RIA服务绝对是在ASP.Net和Silverlight之间共享代码的最佳选择。除了之前提到的领域服务模型的生成外,它还允许您通过简单地在文件名中插入“shared”来共享Web应用程序和Silverlight之间的单个文件。例如,“MyClass.shared.cs”。

RIA服务不需要花费太长时间来了解(并且有很好的教程)。尝试这个


1

嗯,ASP.NET 本身 不会工作(同样适用于许多完整的库),但我假设您只是想指本地领域模型等。

如果我没记错,您可以 尝试简单引用它,但可能会生成警告消息。当然,您需要格外小心,不要使用其他平台不支持的任何东西...

在我看来,这里更好的选项是创建一个包含相同 .cs 文件的第二个 csproj(或者通过通配符/深层包含进行欺骗)。并构建两个。相同的 C#,不同的 dll/platform。

还经常发现您需要使用 非常小 的 #if 指令。


同样的问题,我在上面问了avidgator。 - locoboy

1

WCF RIA Services 可以帮助您解决问题。Silverlight 不使用与 ASP.Net 相同的运行时,因此您无法直接在客户端和服务器端共享包含模型类的程序集。为了解决这个问题,WCF RIA 服务将基于服务器端的模型类,在客户端上透明地生成类。显然,WCF RIA 服务还允许您使用 Web 服务创建、读取、更新和删除这些类的对象。

MSDN 上有关于WCF RIA 服务客户端代码生成的更具体信息。


1
@cfarm54:我不知道如何衡量它的难度,但你可以尝试一些MSDN上的示例(请跟随我的链接),自己看看。如果你不需要Web服务,那么也许Marc Gravell的建议更简单,即使用链接共享源文件。 - Martin Liversage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接