VS2017 nuget包文件被视为链接而不是实际文件

时间:2018-06-04 09:48:03

标签: visual-studio-2017 nuget nuget-package

我正在尝试使用csproj文件创建一个nuget。我的文件被复制,但当另一个项目导入nuget包时,我的log4net.config(和其他文件)被视为链接。这些文件也不会复制到构建目标目录。 (参见下面屏幕截图中的蓝色图标)

log4net as a "project" link

我的cs项目包含以下代码。

<ItemGroup>
  <Content Include="contentFiles/**/*.*;log4net.config" copyToOutput="true">
    <IncludeInPackage>true</IncludeInPackage>
    <CopyToOutput>true</CopyToOutput>
    <BuildAction>Content</BuildAction>
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </Content>
</ItemGroup>

我需要做什么才能使log4net.config:

1 - 不被视为链接文件

2 - 默认情况下被复制到outbut目录。

1 个答案:

答案 0 :(得分:1)

  

我需要做什么才能将log4net.config:1 - 视为链接文件

这是设计的。 contentFiles应该作为链接添加。不支持将文件复制到项目的源目录中,对于经典项目来说,这是一种沮丧的做法。

检查Martin的回答here

  

这是设计的。 NuGet包不再需要修改项目的源,而只是添加到其构建的输出或构建过程(除了.NET库)。用于向项目添加源的内容文件夹仅继续支持基于packages.config的项目,因为它对现有项目来说是一个重大变化,但使用project.json或PackageReference(VS 2017)的项目会获得新的行为。

现在,contentFiles部分将为这些文件生成的msbuild项控制到obj\projectname.csproj.nuget.g.props文件中。

  

2 - 默认情况下被复制到outbut目录。

您可以为.nuspec文件中的copyToOutput="true"设置log4net.config

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>xxxx</id>
    <version>1.0.0</version>
    <authors>Tester</authors>
    <owners>Tester</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package Description</description>
    <contentFiles>
      <files include="any/any/Views/log4net.config" buildAction="content" flatten="true" copyToOutput="true"/>
  </metadata>

    <files>
      <file src="contentFiles/any/any/log4net.config" target="contentFiles/any/any/log4net.config" />
    </files>

您可以查看文档NuGet ContentFiles Demystifiedthis thread了解详情。