ASP共享类库参考.NET 5 beta 7



在我们当前的环境中,我们有一些共享的公共库(c# class library .net 4.5.1 csproj)项目,它们被asp.net和控制台应用程序引用。我们正在考虑升级我们的web项目1到ASP。. NET 5开始测试一些即将到来的新变化。

因为我不能做一个项目参考在ASP。. NET 5到旧的cspproj库类型,我必须通过它编译的DLL引用库,并从项目中删除dnxcore50。Json(这对我们来说很好)。然而,我们拥有共享库源代码,并不断在我们的DEV环境中进行更新,以便经常对DLL进行修改和更改。ASP。. NET 5将DLL放在lib目录中,而不使用到csproj目录的路径。

如果你有asp.net &控制台csproj应用程序以及asp.net 5应用程序需要共享一个公共代码库,而不必维护两个代码库?在编译asp.net 5项目之前,您是否会推荐一个构建任务来编译公共库项目并替换lib中的参考DLL,或者为我们的共享库设置一个本地的nuget repo,因为项目引用现在对于csproj来说是不可能的?我们在TFS中是一个共享的团队,所以无论我做什么,都需要很容易地复制给其他人。

如果共享代码不经常更改,我会使用共享的nuget存储库。这样,您就获得了使用nuget包的所有好处:版本控制、易于恢复等。您的解决方案可以包含更少的项目并更快地编译。但是,如果共享代码不断更改,那么执行包-推送-恢复过程可能会很痛苦。

还有另一种方法- dnu有一个名为wrap的方便命令。它将你现有的.csproj文件包装成project.json文件,然后可以被aspnet5项目引用。

你可以这样做:

  1. 在包含项目的某个顶级目录中添加global.json文件。在projects部分,列出包含源代码的目录,例如:

    {
        "projects": [ "src", "test" ],
        "sdk": {
            "version": "1.0.0-rc1-final"
        }
    }
    
  2. 在包含global.json的同一目录下,为每个现有的.csproj项目执行dnu wrap

    dnu wrap src/my.project/my.project.csproj  
    

    这将创建一个目录wrap,其中包含包装.csprojsproject.json文件。示例文件如下所示:

    {
        "version": "1.0.0-*",
        "frameworks": {
            "net45": {
                "wrappedProject": "../../src/my.project/my.project.csproj",
                "bin": {
                    "assembly": "../../src/my.project/obj/{configuration}/my.project.dll",
                    "pdb": "../../src/my.project/obj/{configuration}/my.project.pdb"
                }
            }
        }
    }
    

    注意wrap目录也被添加到global.jsonprojects节。

  3. 在您的解决方案中,添加一个新的aspnet项目,并向包装的项目添加一个引用。只需添加:

    "my.project": ""
    

    dependencies节。Aspnet应该自动选择根目录下的global.json文件,并在所有目录中查找项目,包括wrap目录。

  4. 现在您可以使用my.project中的所有类,在调试时进入它们,转到定义等。注意,在您的解决方案中,您仍然使用旧的csproj

您可以在这里找到示例代码:https://github.com/heavymetaldev/aspnet5-wrap。

我想这可能会变得有点复杂,如果你有一些自定义的东西在你的项目,如条件编译,自定义包含等

最新更新