通过project.json将内容文件复制到DNX控制台应用程序的输出目录

12

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

我尝试添加了一个像这样的“resource”变量,但它没有起作用:

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\\\""
    ] 
  }

复制资源.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的路径吗?你所采用的方法通常应该是有效的:https://dev59.com/6Y7da4cB1Zd3GeqP7gXv - Ilya Chumakov
你可能需要更新你的标题。你在 project.json 文件中尝试过的内容将会把 NLog.config 编译到程序集中。你在文章中所描述的是将 NLog.config 复制到输出目录。 - Nkosi
不确定你做错了什么。我能想到的唯一可能是NLog不支持DNXCORE50,所以从你的project.json中将其删除。微软自己的示例可能会有所帮助。https://github.com/aspnet/Logging/tree/1.0.0-rc1/samples/SampleApp - Roberto Hernandez
4个回答

23

与此同时,.NET Core RTM已经发布。

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

可以使用 copyToOutput 选项进行如下操作:

之前:

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

  // more stuff
}

之后:

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

  // more stuff
}

这应该是答案。谢谢。 - Sako73
1
对我来说,只需要这个就可以了: "buildOptions": { "copyToOutput": "file.txt" } - fabriciorissetto

10

buildOptions 中使用 copyToOutput

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

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

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

复制目录时,请记得添加尾随的\\


3
默认情况下,包含 project.json 的目录中的所有代码文件都包括在项目中。您可以使用 project.json 中的 include/exclude 部分来控制此行为。
更多信息请参见:http://docs.asp.net/en/latest/dnx/projects.html#including-excluding-files 您可以像这样使用 project.json 的 content 部分:
{
  "content": [
    "NLog.config"
  ]
}

现在文档中说,默认情况下文件应该作为内容默认值被复制,如果使用*(通配符代表所有文件),但你可以通过明确指定你想要的文件在content部分来强制执行。

还是不行。我在输出文件夹(...\MyProject\artifacts\bin\MyProject\Debug\app)找不到 NLog.config 文件,也看不到任何控制台输出。我确定如果在代码中配置了 NLog,它是可以工作的。 - Alex G.
好的。由于内容复制路线不起作用,您可以尝试这个:https://dev59.com/MZHea4cB1Zd3GeqPqIET#33952463,在那里他们使用一个“postbuild”脚本将文件(在这种情况下是dll)移动到输出目录。 - Nkosi
2
此属性已被弃用,@ChristianSpecht的回答中有新属性。 - fabriciorissetto

2
我认为在RC1中它有问题。我也在寻找如何将内容文件复制到输出文件夹,并找到了类似于我们正在看到的此问题
正如@Nkosi所指出的那样,content的默认值是**/* (您可以通过他提供的文档链接和模式进行查看)。
至于您的postbuild步骤,您可以通过“生成输出”来使其运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接