【问题标题】:Purpose of Accord.Dll.ConfigAccord.Dll.Config 的用途
【发布时间】:2019-11-19 20:24:58
【问题描述】:

我在一个项目的 csproj 中注意到了这一点:

  <ItemGroup Condition="'$(MSBuildThisFileDirectory)' != '' And HasTrailingSlash('$(MSBuildThisFileDirectory)')">
    <Content Include="$(MSBuildThisFileDirectory)..\packages\Accord.3.5.0\build\Accord.dll.config">
      <Link>Accord.dll.config</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

导致构建失败,因为使用 dotnet restore 恢复时无法在包目录中找到配置

Accord.dll.config 在github 上看起来像这样:

<!-- Mono library mapping mechanism -->
<configuration>
  <dllmap dll="ntdll.dll">
    <dllentry os="linux,solaris,freebsd" dll="libc.so.6"/>
  </dllmap>  
</configuration>

我想这意味着如果我不想在单声道上运行我的项目,我可以安全地删除它吗?

【问题讨论】:

    标签: .net visual-studio msbuild nuget accord.net


    【解决方案1】:

    您的问题的标题是“Accord.Dll.Config 的目的”,鉴于您在问题中复制的内容,目的是将使用“ntdll.dll”的任何 P/Invoke 映射到“libc.so. 6" 在 Linux、Solaris 和 FreeBSD 上。因此,一方面,可以肯定的是,如果您不打算在这些平台上运行您的应用程序,您可能不需要此文件。

    但是,我很困惑为什么它会出现在您的项目中。该软件包似乎没有修改您的 csproj,因此似乎有人手动将其添加到 csproj。相反,该包包含一个文件build/accord.targets,其中包含相同的内容。考虑到您似乎正在使用 packages.config,NuGet 应该已修改项目以导入 accord.targets 文件,条件是文件何时存在,以便恢复成功,但还添加一个目标,说明如果文件不存在构建时存在,构建失败并显示消息包尚未恢复。

    鉴于您的 csproj 似乎已被手动修改,如果您的项目处于源代码控制之下,您可以考虑查找谁以这种方式修改了 csproj 并询问他们。但是您使用的是包的 3.5.0 版本,并且 3.6.0 版本是在 2017 年 7 月 7 日发布的,这意味着您的项目可能至少有 2 年的历史,并且可能会忘记有关编辑 csproj 的详细信息现在。

    无论如何,我建议是的,从您的 csproj 中删除该项目组。不是因为您不使用单声道,而是因为一开始就不应该将它添加到您的项目中。

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 2014-10-16
      • 2010-12-24
      • 2010-10-14
      相关资源
      最近更新 更多