【问题标题】:MSB4020: The value "" of the "Project" attribute in element <Import> is invalidMSB4020:元素 <Import> 中“Project”属性的值“”无效
【发布时间】:2018-07-05 09:47:55
【问题描述】:

我有一个 .NET Framework 项目的解决方案,主要是 F#,然后是一些 C#。我使用 Paket 而不是 NuGet 进行数据包管理。现在,我已将我的第一个 .NET Standard 2.0 库添加到此解决方案中。

当我运行我的构建脚本时,该脚本运行另一个构建脚本,它调用 devenv 进行编译,出现错误,指出项目的 obj\project.assets.json 文件丢失。它实际上是在编译时生成的,但前提是编译了其他项目之一。那么为什么会被报告为丢失有点奇怪。

如果我只运行内部脚本,没有问题。如果我打开VS并编译,没有问题。好笑。

我不太确定这些东西是如何工作的——或者不是。但是在谷歌搜索之后,似乎这个文件应该在使用 devenv(Visual Studio)编译之前放在那里,而不是由 devenv 放在那里。

我运行了 Paket 还原。这并没有产生缺少的 project.assets.json。

我搜索了“dotnet restore”的方式。运行此程序时,我在几个较旧的项目中收到此错误。

MSB4020: The value "" of the "Project" attribute in element <Import> is invalid.

所以问题是,我现在该怎么办?

【问题讨论】:

  • 只要我一直在使用 F#,这个错误就一直存在;可能与 F# 本身一样长。它与未正确导入 F# MSBuild 目标有关。我最近在一台机器上遇到了这个问题,并通过将&lt;Choose&gt; 部分从github.com/TeaDrivenDev/FilenameEmbeddedMetadataOrganizer/blob/… 开始添加到项目文件中来“修复”它。在下一次 Visual Studio 更新之后,问题就消失了,并且在没有上述“修复”的情况下也能正常工作。

标签: c# f# .net-core paket


【解决方案1】:

我终于发现,Paket 还原后,我可以只在新的 .NET Core 项目上运行此命令,从而避免解决方案中其他项目的错误。

dotnet restore TheProject

然后在编译之前生成丢失的文件,然后构建脚本的其余部分运行完成。

PS(编辑): 这对我来说不是一个完美的解决方案,因为我必须为我的解决方案中的每个 .NET Standard 和 .NET Core 项目将该行添加到我的构建脚本中。必须像这样维护脚本并不理想。出于这个原因,我将研究如何消除 MSB4020 错误。在此之前,这是一个很好的解决方法。

【讨论】:

  • 自从我报告了这个问题后,我已经向这个解决方案添加了几个 F# 和 C# Standard 2.0 库和一个 F# Core 2.1 控制台应用程序。我不需要为每个其他库添加此命令以使构建通过,即使它们包含第一个最低级别库未使用的 nuget 库。我不知道这是为什么,也不会费心去调查。
  • 后来我添加了更多项目,其中一些确实需要 donet 还原。所以现在我已经确保每个标准和核心项目都在构建脚本中获得一个 dotnet restore,以避免在某个看似任意的点上中断。在某个时候我会摆脱框架,然后我希望我可以简单地对整个解决方案进行 dotnet restore。
  • 后来我发现能够进行 dotnet restore 并不取决于项目是核心/标准而不是框架,而是取决于具有新格式的项目文件。所以现在我的解决方案中还有一个 Framework 项目,但它已经转换为新的项目格式。这使得对解决方案进行 dotnet restore 成为可能,这对于我的构建脚本来说是理想的。
【解决方案2】:

我可以建议您尝试更改项目文件 (.fsproj),如下所示:

  1. 打开工程文件,找到这一行:Import Project="$(FSharpTargetsPath)"
  2. 地址:Condition="Exists('$(FSharpTargetsPath)')"
  3. 因此,您应该得到字符串:Import Project="$(FSharpTargetsPath)" Condition="Exists('$(FSharpTargetsPath)')"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-15
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多