MSB4020:元素 <Import> 中 "Project" 属性的值“”无效

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

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

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

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

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

我运行 数据包恢复。那没有产生丢失的项目。assets.json.

我用谷歌搜索了 "dotnet restore"。当 运行 执行此操作时,我在几个较旧的项目上遇到此错误。

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

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

我终于想通了,在 Paket 恢复后,我可以 运行 只在新的 .NET Core 项目上执行此命令,从而避免了解决方案中其他项目的错误。

dotnet restore TheProject

然后编译前生成缺失的文件,剩下的构建脚本运行完成。

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

我建议您尝试按如下方式更改项目文件 (.fsproj):

  1. 打开项目文件并找到行:Import Project="$(FSharpTargetsPath)"
  2. 添加:Condition="Exists('$(FSharpTargetsPath)')"
  3. 因此,您应该得到字符串:Import Project="$(FSharpTargetsPath)" Condition="Exists('$(FSharpTargetsPath)')"