针对.NET 3.5和Silverlight

时间:2009-07-03 18:03:09

标签: .net silverlight msbuild build csproj

让我们假设我已经有一个构建.NET 3.5程序集的项目。现在我想为Silverlight构建这个程序集,而且,只需要进一步努力就可以维护它的Silverlight版本。

什么是不可接受的:

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

什么是可以接受的:

  • 添加自定义指令,允许我依赖于例如Silverlight或.NET。 MSBuild属性。
  • 为Silverlight添加特殊构建配置
  • 将#ifdef Silverlight / #endif部分添加到源代码中。
  • 通常对.csproj / .cs。
  • 的任何其他修改

基本上,我想维护一个项目,但目标是两个框架。我不想维护两个单独的项目,因为这可能会导致错误,例如忘记包含新文件。如果有很多项目和大团队,那么排除这些错误非常重要。

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

5 个答案:

答案 0 :(得分:8)

您是否还排除了从Silverlight项目链接到项目内的文件?这是在Silverlight和完整CLR之间共享实现的一种相当常见的方法。 Sharing Code Between .NET and Silverlight Platforms

此外,根据Justin Angel的说法,您可以从完整的CLR中引用和使用Silverlight类库。我自己没有尝试过这个问题,但是它仍然没有回答一些问题,但它确实使情景变得简单明了:http://silverlight.net/blogs/justinangel/archive/2008/12/29/using-silverlight-dlls-on-the-desktop.aspx

答案 1 :(得分:1)

我同意斯科特的观点。为自己省去很多痛苦。两个共享相同代码库的项目是要走的路。您需要它在两个环境中使用VStudio,使用不同的库,包含/删除文件,以便轻松完成这么多事情!

有两个项目超重的原因是为了拥有一个。

答案 2 :(得分:1)

MSDN包含有关平台多重定位的详细信息: Multi-targeting on MSDN

答案 3 :(得分:0)

您必须拥有两个项目,因为两个平台的mscorlib引用不同。

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

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

答案 4 :(得分:0)

我认为你需要做的就是把它排除在外。您的Silverlight代码应仅用于UI以及与后端WCF服务的通信。这些服务将运行您的.NET 3.5代码(您要共享的代码)。这样你就可以分享和n层了。

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

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