【问题标题】:Cross compile for .NET 4 and Silverlight 4 in VS2010 without duplicating files在 VS2010 中交叉编译 .NET 4 和 Silverlight 4,无需复制文件
【发布时间】:2010-07-26 17:55:19
【问题描述】:

我们在一个解决方案中有大量项目,主要是针对 .NET 4.0 的简单类库(稍后通过 MEF 加载)。

我们希望在不复制文件的情况下为 .NET 4.0 和 Silverlight 运行时编译大量此类文件。

有没有办法创建新的 Silverlight 类库并链接来自其他项目的源文件,以便编译 .NET 4.0 库和 Silverlight 4.0 库?

我知道 .NET 4.0 可以加载 silverlight 4 程序集,但我还是想编译这两个版本,而不是为 Silverlight 编译所有内容。

更新: 我曾经看到一个解决方案,其中一些项目包含指向其他项目中其他文件的链接,因此当您更改一个项目中的文件时,它也会在另一个项目中更新。这就是我的意思。

解决方案的屏幕截图,Vialis.Led.Interfaces 项目包含原始文件,在 silverlight 项目中我要创建指向这些文件的链接。

【问题讨论】:

    标签: .net silverlight visual-studio-2010 compilation


    【解决方案1】:

    当你想重用代码时,你基本上有三种选择:

    • 通常将所有基本类库创建为 Silverlight 类库项目,因为它是具有最低功能集的框架。抛出除 mscorlib.dllSystem.dllSystem.Core.dll 之外的所有引用。然后,您可以在任何完整的 .NET 项目中链接此类 Silverlight 库。

    • 您可以使用“添加为链接”功能链接来自另一个项目的单个代码文件(右键单击项目 -> 添加现有项目 -> 将“添加”按钮更改为“添加为关联”)。通过这种方式,您可以创建 Silverlight 项目并链接整个 .NET 项目中的各个文件。但是,如果您有很多文件并且经常在源项目中添加/删除文件和文件夹,这可能会变得乏味。

    • 要解决这个问题,您可以查看 http://msdn.microsoft.com/en-us/library/dd458870.aspx 的 Project Linker ... 但我自己还没有尝试过。

    【讨论】:

    • 谢谢你,最后一个真的很有帮助,但是我将 Reed 的答案标记为答案,因为他是第一个并专门回答了我的问题,你的回答确实对我有很大帮助,我会调查项目链接器,谢谢。
    【解决方案2】:

    只需为 Silverlight 设置第二个项目,然后使用 Project->Add Existing Files... 将每个项目文件添加到 Silverlight 项目中。

    您还可以使用分部类来分离特定于 Silverlight 或特定于 .NET 框架的功能。 (顺便说一句,这是 Prism 使用的方法。)

    【讨论】:

    • @TimothyP:不。如果您添加现有项目,并将项目保存在同一个文件夹中,它们使用完全相同的文件......不需要副本。 :)
    • 我明白了,让我试试
    • 不,它会将其复制到 silverlight 项目文件夹中...我需要按住什么键吗?
    • @TimothyP:您需要在 与 .NET 项目相同的文件夹中(在磁盘上)创建您的 silverlight 项目。只需将它们在目录结构中彼此相邻,然后复制项目结构...
    • 右键单击添加现有项目对话框中添加按钮右侧的小向下箭头,下拉上下文菜单应具有“添加为链接”。使用它。
    【解决方案3】:

    微软最近发布了便携式库工具: http://msdn.microsoft.com/en-us/library/gg597391.aspx

    我一定会看看这些。

    【讨论】:

    【解决方案4】:

    是的。在同一目录下创建两个项目,一个使用 Silverlight,一个使用常规。

    您也可以自动执行此操作,.csproj 文件是基于 Xml 的。删除特别是以下内容将使其成为常规:

    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
    

    【讨论】:

      【解决方案5】:

      正如接受答案中的 cmets 所说,您使用文件对话框中添加按钮上的箭头来执行“添加为链接”。

      再添加一件可能有用的小事:重要的是要记住 Silverlight 和 .NET 4.0 并不相同。如果您的代码可以在其中一个编译但不能在另一个编译,则默认情况下,开发工具会为 Silverlight 定义一个 SILVERLIGHT 条件编译符号,因此您可以执行 #if SILVERLIGHT。

      【讨论】:

      • 嘿,谢谢。是的,我意识到了,但通用代码只是简单的接口定义:)
      猜你喜欢
      • 2020-11-16
      • 2011-06-20
      • 2021-05-17
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多