我在Visual Studio 2015中有一个.NET核心项目。在其中,我使用了一个Nuget包,但在找到包中的错误后,我检查了它的源代码并将库项目包含到我的调试解决方案中问题。成功解决问题后,我将修复程序发送到上游,它被接受并发布了新的Nuget软件包版本。所以我去了,从我的解决方案中删除了库项目,并打算将软件包更新到固定版本以继续处理我的项目。 Visual Studio Nuget Package Manager找到了新版本,一切似乎都很好。
然而,它没有用。每次我尝试更新或重新安装软件包时,库项目都会重新出现在我的解决方案中,而不是仅仅转到nuget软件包依赖项。 (显然,它仍然包含我的签出版本而不是当前的nuget包版本,因此出现NU1007警告 - 指定的依赖性与最终版本不同。)
我删除了项目中的所有用户/临时文件,我删除了project.lock.json
文件。使用全局文件搜索,在项目目录下的任何文件中都没有单独出现库项目的文件路径(其源代码在主项目的目录之外检出)。然后我运行dotnet restore
,它没有说任何有趣的内容,但它创建了project.lock.json
文件,在内部,它将包的旧版本添加为"type": "project"
path
转到project.json
和msbuildProject
转到完全不同的目录中的xproj文件。
dotnet
在哪里记住/找到路径?它应该这样做吗?我该怎么做才能阻止它再次开始使用标准的Nuget包源?
答案 0 :(得分:1)
您必须将解决方案放在单独的目录中,因为VS2015中的.NET Core Projects具有独特的文件系统要求,并且当您将它们放在同一目录中时会表现不佳(每个解决方案都会生成一个隐藏的.vs
文件夹,它们最终会重叠。
例如,你可以将目录结构更改为:
.\Solutions\A\ <-- Directory for Solution A
.\Solutions\B\ <-- Directory for Solution B
.\A\ <-- Project A
.\B\ <-- Project B
这意味着每个解决方案的隐藏.vs
文件夹将不再重叠(即解决方案不会共享此内容)
.\Solutions\A\ProjectA.sln
.\Solutions\A\global.json
.\Solutions\A\.vs\
.\Solutions\B\ProjectB.sln
.\Solutions\B\global.json
.\Solutions\B\.vs\
您可以通过本文获得更多信息:Organizing Your Project to Support .NET Framework and .NET Core其中包含一个附加说明:
将
project.json
重命名为{project-name}.project.json
- 这可以防止在尝试恢复同一目录中的库的包时Visual Studio中的潜在冲突。更多
信息,请参阅“我的多个项目中的NuGet常见问题解答 相同的文件夹,我如何使用单独的packages.config或project.json
每个项目的文件?“。- 替代方法:在另一个文件夹中创建PCL并引用原始源代码以避免此问题。将PCL放在另一个中 文件夹有一个额外的好处,即没有Visual Studio的用户
2015年仍然可以在不加载新项目的情况下处理旧项目 溶液
此外,您可能希望详细了解.NET Core Tooling in Visual Studio
csproj文件格式已经大大简化,使其对命令行体验更友好。如果您熟悉project.json,则可以看到它包含非常相似的信息。它还支持通配符语法,以避免列出单个源文件。
这是dotnet new创建的默认csproj。它使您可以访问属于.NET Core运行时安装的所有程序集,例如System.Collections。它还提供对.NET Core SDK附带的所有工具和目标的访问。
<Project>
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" />
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Compile Include="**\*.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NETCore.App" Version="1.0.0" />
<PackageReference Include="Microsoft.NET.SDK" Version="1.0.0" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
如您所见,生成的项目文件定义实际上非常简单,避免使用GUID等复杂值。 project.json到.csproj元素的详细映射列在here。
由于改进的.csproj文件支持通配符,因此您不需要项目文件中的完整代码文件列表。这样可以获得出色的工具体验:添加到文件夹的文件将自动显示在解决方案资源管理器中。如果需要,在文件中进行的更改将自动修改项目文件。
您可以在csproj格式中添加NuGet包引用,而不需要在具有特殊格式的单独文件中指定它们。 NuGet包引用采用以下形式:
例如,如果要将上面项目中的引用添加到WindowsAzure.Storage,则只需将以下行添加到其他两个包引用中:
<ItemGroup>
<PackageReference Include="Microsoft.NETCore.App" Version="1.0.0" />
<PackageReference Include="Microsoft.NET.SDK" Version="1.0.0" />
<PackageReference Include="WindowsAzure.Storage" Version="7.2.1" />
</ItemGroup>
答案 1 :(得分:0)
注意:此答案已从here
复制本地项目优先于NuGet包。不过,我不知道这是什么级别。
解决方案是在project.json
中明确指定您要引用NuGet包而不是同一解决方案中的项目。
"YourNuGetPackageName": {
"type": "package",
"version": "VersionOfYourNuGetPackage"
}
您可以查看示例{{3}}。