同时针对.NET 3.5和Silverlight的目标定位

12

假设我已经有一个构建 .NET 3.5 程序集的项目。现在我想为 Silverlight 构建该程序集,并且进一步以最小的努力维护其 Silverlight 版本。

不可接受的方法:

  • 为 Silverlight 构建创建单独的项目

可接受的方法:

  • 添加自定义指令,使我可以基于例如 MSBuild 属性针对 Silverlight 或 .NET 进行目标定位。
  • 为 Silverlight 添加特殊的构建配置
  • 在源代码中添加 #ifdef Silverlight / #endif 段落。
  • 通常修改 .csproj / .cs 等文件。

因此,基本上,我想要维护一个项目,但是将其针对两个框架进行目标定位。我不想维护两个单独的项目,因为这可能会导致像忘记包含新文件这样的错误。如果有许多项目和大型团队,则真的很重要来排除此类错误。

如果这完全不可能,那么任何提供类似好处的解决方案都可以接受。


问题不太清楚。您是否想要构建一个程序集,然后在 Silverlight 应用程序中使用该程序集的方法等?由于大多数在 Silverlight 中的实际工作是通过与 Web 服务通信完成的,因此我不确定您是否有问题。也许您有一个分层问题?这意味着您的层次之间没有明确的定义。 - jcollum
1
Silverlight是.NET 3.5。我想你指的是Silverlight和WPF。此外,这与以下问题非常相似:https://dev59.com/4HVC5IYBdhLWcg3wsTfv - Scott Whitlock
1
Silverlight是.NET 3.5吗?看起来不可能,因为正如你刚才所说,它的项目引用了不同的mscorlib。此外,它是完全不同的执行平台... - Alex Yakunin
“你想构建一个程序集,然后在Silverlight应用程序中使用该程序集的方法等吗?” - 是的,确切地说。假设我想在.NET和Silverlight应用程序之间共享相同的BLL \ DAL代码。” - Alex Yakunin
“我相信你指的是Silverlight和WPF” - 不,我不是指WPF。我对任何演示代码都不感兴趣。我说的是仅逻辑代码。 - Alex Yakunin
1
那么假设我想构建一个包含计算器类和单个对象Calculate(string expression)方法的程序集,并且我需要构建这个程序集的两个版本:一个是针对.NET 3.5的,另一个是针对Silverlight的。 - Alex Yakunin
5个回答

8

有没有任何工具可以让我自动同步维护原始项目和 Silverlight 项目中的链接(或至少那里的链接)? - Alex Yakunin
1
在 Prism (http://compositewpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=19170) 中有一个项目链接器。概述在这里:http://www.global-webnet.net/blogengine/post/2009/01/10/Project-Linker-sharing-single-code-base-between-Silverlight-and-Desktop-applications.aspx - OdeToCode
好的 - 如果有其他答案的话,我会等待的。现在看来这似乎是我能做的最好的选择... - Alex Yakunin

1

1

我同意Scott的观点。将代码库共享给两个项目是最好的选择,这样可以避免很多麻烦。你需要在两个环境中使用VStudio,在不同的库中使用它,在包含/排除文件时使用它,在许多方面都可以轻松地使用它!

拥有两个项目的原因远远超过只有一个项目的借口。


0

你需要有两个项目,因为两个平台的mscorlib引用是不同的。

查看这个问题:http://www.google.ca/search?hl=en&q=targetting+silverlight+and+wpf&meta=&aq=f&oq=

如果你只想要一个普通的.NET库在两个平台之间共享,那么我建议创建两个项目(一个用于Silverlight,一个用于普通),并在两个项目中包含相同的文件。这对其他开发人员来说更容易理解。


我可以使用 Condition=" '$(SilverlightBuild)' != '' " 禁用/启用必要的选项吗? - Alex Yakunin
1
你可以这样做,但其实不必要,因为它们已经被包含在两个项目文件中了。例如,每个.csproj文件都定义了SL或WPF或NET35。每个csproj文件都包括/排除它需要的任何文件/库。此外,不要链接文件,将csproj文件放在同一个目录下,然后只需“添加->现有项目”。 - Ray
关于“我能否禁用”的问题 - 我的意思是“我能否使用MSBuild条件属性来维护单个项目?” - Alex Yakunin

0

我认为你需要适当地分层。你的Silverlight代码应该仅用于UI和与后端WCF服务的通信。这些服务将运行你的.NET 3.5代码(你想要共享的代码)。这样你就有了共享和n-tier。

如果你在客户端的Silverlight代码中进行大量计算,然后将其提交到服务器(可能是数据库),那么我认为你正在打开一个安全漏洞。

你没有给出一个令人信服的理由,说明为什么一个单独的项目需要访问Silverlight项目中的代码。


我了解Silverlight \ RIA应用程序的架构,我提出这个问题是因为我知道我需要什么。所以一般来说建议是好的,但在这里完全不适用。 - Alex Yakunin
在客户端进行大量计算可能有许多原因 - 例如,假设我想要本地排序一些数据(比如,1MB)。我已经将其传递给了客户端,而其排序的成本远小于直接从服务器获取排序数据的成本。 - Alex Yakunin
这只是一个例子。另一个类似于Paint.NET的程序。在这种情况下,许多滤镜效果必须在本地处理。附言:不要告诉我关于Silverlight 3.0位图和GPU加速的事情,我已经知道了。简而言之,我需要一个确切的答案。 - Alex Yakunin

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