【问题标题】:Copy content files to output directory of DNX Console app via project.json通过 project.json 将内容文件复制到 DNX 控制台应用程序的输出目录
【发布时间】:2015-12-27 15:56:15
【问题描述】:

我刚刚开始在 VS2015 中使用 DNX 1.0.0-rc1-update1。我的第一个应用程序是一个“控制台应用程序(包)”项目。一切正常,除了 NLog 日志记录。我怀疑这是因为 NLog.config 没有被复制到输出文件夹。如何告诉 VS 通过 project.json 将此文件复制到输出文件夹?

我试过像这样添加一个“资源”变量,但它不起作用:

project.json

...
"resource":"NLog.config",
...

编辑 1: 我使用的是 dnx451,所以兼容性不是问题。

编辑 2: 我将以下内容添加到 project.json

"scripts": {
    "postbuild": [
      "%project:Directory%/../scripts/copy_resources.bat \\\"%project:Directory%\\\" \\\"%project:Directory%/../artifacts/bin/%project:Name%/%project:Version%/dnx451\\\""
    ] 
  }

copy_resources.bat

echo "Running script" >> C:\logs\log.txt
echo %1 >> C:\logs\log.txt
echo %2 >> C:\logs\log.txt

xcopy %1\NLog.config %2 /U /Y

在 VS 的输出窗口中没有任何内容表明该脚本已实际运行。此外,log.txt 是空的。

如何调试构建过程?

【问题讨论】:

  • 您是否尝试过在 project.json 中使用 NLog.config 的路径?您应用的方法通常应该有效:stackoverflow.com/questions/31972571/…
  • 您可能需要更新您的标题。您在 project.json 文件中尝试的内容会将 NLog.config 编译到程序集中。您在帖子中描述的是将NLog.config 复制到输出目录。
  • 不确定你做错了什么。我唯一能想到的是 NLog 不支持 DNXCORE50,所以从你的 project.json 中删除它。微软自己的样本可能会有所帮助。 github.com/aspnet/Logging/tree/1.0.0-rc1/samples/SampleApp

标签: c# visual-studio-2015 dnx project.json


【解决方案1】:

同时,.NET Core RTM 已发布。

现在,将内容复制到输出文件夹的当前方法是使用project.json 中的buildOptions section

您可以像这样使用copyToOutput 选项:

之前:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },

  // more stuff
}

之后:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true,
    "copyToOutput": { "includeFiles": [ "NLog.config" ] }
  },

  // more stuff
}

【讨论】:

  • 这应该是答案。谢谢。
  • 对我来说这是必要的:"buildOptions": { "copyToOutput": "file.txt" }
【解决方案2】:

buildOptions 中使用copyToOutput

{
  "buildOptions": {
    "copyToOutput":  "NLog.config" 
  }
}

或者为多个文件声明一个数组:

{
  "buildOptions": {
    "copyToOutput":  ["NLog.config", "testdata\\"]
  }
}

要复制目录,请记住添加尾随\\

【讨论】:

    【解决方案3】:

    默认情况下,包含 project.json 的目录中的所有代码文件都是 包含在项目中。您可以使用包含/排除来控制它 project.json 的部分。

    更多信息:http://docs.asp.net/en/latest/dnx/projects.html#including-excluding-files

    您像这样使用project.json内容部分

    {
      "content": [
        "NLog.config"
      ]
    }
    

    现在文档说默认情况下该文件应该被复制为默认内容 if *(所有文件的通配符),但您可以通过在 content 部分。

    【讨论】:

    • 还是不行。我在输出文件夹 (...\MyProject\artifacts\bin\MyProject\Debug\app) 中找不到 NLog.config,也看不到任何控制台输出。如果我在代码中配置它,我肯定知道 NLog 可以工作。
    • 好的。看到内容复制路线不起作用,您可以尝试这个。 stackoverflow.com/a/33952463/5233410 他们使用 postbuild 脚本将文件(在本例中为 dll)移动到输出目录。
    • 此属性已弃用,@ChristianSpecht 的答案具有新属性
    【解决方案4】:

    我认为它在 RC1 中被破坏了。我也在寻找如何将内容文件复制到输出文件夹,并发现 this issue 看起来与我们所看到的相似。

    正如@Nkosi 指出的那样,content 的默认值是**/*(您可以通过他提供的文档链接查看,也可以通过schema 查看)。

    至于您的postbuild 步骤,您可以通过"producing outputs" 进行。

    【讨论】:

      猜你喜欢
      • 2010-09-21
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多