6

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

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

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

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

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

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

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

那么问题来了,我现在该怎么办?

4

2 回答 2

3

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

dotnet restore TheProject

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

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

于 2018-07-05T09:50:08.997 回答
1

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

  1. 打开项目文件,找到以下行:Import Project="$(FSharpTargetsPath)"
  2. 添加:Condition="Exists('$(FSharpTargetsPath)')"
  3. 结果,您应该得到字符串:Import Project="$(FSharpTargetsPath)" Condition="Exists('$(FSharpTargetsPath)')"
于 2020-10-06T09:33:12.507 回答