【问题标题】:asp.net core and including shared content filesasp.net 核心并包括共享内容文件
【发布时间】:2016-07-21 16:41:45
【问题描述】:

我有一个共享项目项目,其中包含一些内容文件,如 JSON 等。

我有许多 ASP.Net 核心项目,我想包含/共享其中一些 JSON 文件。 VS 中的“链接到文件”选项非常简单,但在 ASP.Net 核心项目中不可用。

我已尝试按如下方式使用 buildOptions/copyToOutput,但这似乎不起作用,并且在构建过程中没有记录任何错误或警告。

"copyToOutput": {
    "include": [ "../Common.Includes/mysettings*.json" ] }

有什么想法被感激地接受了吗?

谢谢

唐纳

【问题讨论】:

    标签: asp.net-core-mvc asp.net-core-1.0


    【解决方案1】:

    copyToOutput 设置对我来说很好(至少在 Windows 上的dotnet 1.0.0-preview3-003171 中)。但是请注意,copyToOutput is not transitive - 意思是如果文件被复制到 project A 中,它们将不会被复制到引用 project A 的 project B 中的输出.

    另一种方法是使用底层文件系统并创建指向共享文件或文件夹的符号链接。在 Linux 上是:

    > ln -s ../Common.Includes common
    

    Windows 有一个类似(但不太常用)的功能:

    > mklink /J common ..\Common.Includes
    

    然后您可以配置 dotnet 以在特定事件上运行它:

    "scripts": {
        "precompile": "cmd /C mklink /J common ..\\Common.Includes"
    }
    

    在 RC1 中也有类似 'prepare''prerestore' 之类的事件,它们会更适合这种情况,但现在 they're gonedotnet只支持'precompile''postcompile'

    最好将此命令与一些逻辑一起放入单独的脚本中以检查链接是否已存在。在 Windows 上,我会创建 init.ps1 Powershell 脚本:

    if (!(Test-Path "common")) {
        cmd /C mklink /J "common" "..\Common.Includes"
    }
    

    然后从"scripts"中引用它:

    "scripts": {
        "precompile": "init.ps1"
    }
    

    【讨论】:

    • 嗨,qbik,感谢您花时间整理出如此简洁的答案。我安装了 Preview 2 Sdk 和工具 - 我的版本是 1.0.0-preview2-003121。我在 VS2015 中运行。我的源代码控制系统是 VSTS/TFS,从我读过的内容来看,我认为符号链接和 TFS 不能完美地协同工作。这样就可以通过脚本进行某种形式的复制过程。我可能会等到工具的 v1 来查看它是否适用,如果不适用,则使用脚本方法。谢谢多纳尔
    • @DonalMcWeeney:copyToOutput 也适用于1.0.0-preview2-003121(我检查过)。但是请注意,这些文件将被复制到 bin/Debug/netcoreapp1.0 目录(或类似的目录,取决于项目设置),因此您不会在 VS 中看到它们。
    • 作为脚本方法:我建议将符号链接(上述答案中的 common 目录)添加到版本控制中被忽略的文件中,这样它就不会被签入(在 git 中它将是 .gitignore 中的一个条目,我不知道如何ignore directory in TFS)。这样您就可以避免在 VCS 中出现重复,并且它应该仍然可以在其他开发人员的机器上工作 - 符号链接将在构建时自动重新创建。
    猜你喜欢
    • 2016-10-19
    • 2021-01-10
    • 2021-06-14
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多