關於Net Core 多平台程序的Framework問題


關於Net Core 多平台程序的Framework問題:
(本文只是推測,歡迎大家指正)
最近在研究NetCore的多平台問題,起因是有一個Winform的項目,由於跨平台的要求,想改為NetCore的MVC6項目,但是同時也想保留原來的Winform項目。
所以,一些DLL必須要做到即可以在Winform中使用,也可以在WebForm中使用,也就是所謂的多平台的問題。
當然,大部分情況下,NetCore可以很從容的進行多平台的編譯,但是,也有一些庫的話,不是NetCore內置的庫,需要進行一些配置才行。
首先從結論開始說吧:

{
  "version": "1.0.0-*",

  "dependencies": {
    "mongocsharpdriver": "2.3.0-rc1",
    "MongoDB.Driver": "2.3.0-rc1"
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": "netcoreapp1.0",
      "dependencies": {
        "System.Xml.XmlSerializer": "4.0.11" 
      }
    },
    "net462": {
      "frameworkAssemblies": {
        "System.Xml": "4.0.0.0",
        "System.Xml.XmlSerializer": "4.0.10"
      }
    }
  }
}

由於程序中使用到了XmlSerializer的一些功能,如果不進行配置的話,NetCoreApp的版本也是無法編譯的。
理由大致如下:
netcoreapp1.0 實現了NetStardard1.6版本
在NetStardard1.6版本中沒有XmlSerializer。(System.Xml.ReaderWriter 和 System.Xml.XDocument是有的。)

        <dependency id="System.Xml.ReaderWriter" version="4.0.11" />
        <dependency id="System.Xml.XDocument" version="4.0.11" />

完整的列表可以查看你的系統中如下文件:
C:\Users\yourname.nuget\packages\NETStandard.Library\1.6.0\NETStandard.Library.nuspec

這里添加XmlSerializer可以直接添加到root下面的dependencies里面,但是如果這樣做的話,你會發現net462的地方會出現問題,
net462,應該是Framework 4.6.2的時候,是無法支持XmlSerializer的4.0.11版本的。理由如下:

4.0.11版本支持4.5,但是不支持4.6.
再看一下4.0.10,這個是支持4.6的

但是,如果你將net462,改為452,則必須改為 "System.Xml.XmlSerializer": "4.0.0.0"
我不知道為什么這里4.0.10不可以。

這個時候還必須注意到netcoreapp1.0使用dependencies,而net462使用的是frameworkAssemblies引入程序的。這里的區別還不是非常清楚。
雖然在github上面有對於project.json的詳細介紹,前者是用來指定Package的,后者是指定具體AssebleLevel的引用。

當前這個階段,關於project.json的一些問題還是比較麻煩的,資料其實也在不停修訂中,特別是NetFrame和Core之間,存在着兼容性的問題,所以說多平台程序還是有些注意點的。
當然,如果是簡單的跨平台,就是Net Core,不存在兼容性問題了,倒是存在一些功能缺失的問題。

另外,如果發現NetCore 1.0.1安裝錯誤,請先刪除1.0.0,然后再安裝一次。

本文會隨時更新新的發現。

2016/09/18:
如果指定了多平台,現在如果在csproj里面引用xProj,則發生無法找到引用的問題。但是如果在csproj里面直接引用DLL的話,則可以正常使用。
2016/09/21:
在當前的Net Core中,不支持在 csproj 導入 xproj 。

你好,目前是不支持從 csproj 引用 xproj 項目的,這項工作會在 core 1.1 版本中做這個事情,1.1版本已經沒有 xproj 項目,升級后的visual studio會自動將 xproj 重命名為 csproj,預計在16年年底或者17年初發布。

目前處理你這種情況有兩種方式:
1、將你的程序集打包dll發布到Nuget,或者是通過引用本地程序集的方式引用。
2、轉換你的 csproj 為 xproj 。

希望能夠幫助你。 😃


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM