有没有一种方法可以避免使用nuget包引用来简化开发人员机器上的开发?
我们目前正将我们的“ shared”解决方案中的某些项目移至new csproj文件结构(使用<Project Sdk="Microsoft.NET.Sdk">
)并使用<TargetFramework>netstandard2.0</TargetFramework>
。
这样做,我们必须包含<PackageReference Include="System.Text.Encodings.Web" Version="4.7.0" />
并在shared解决方案的项目“ S”中更改一些代码。
在另一个解决方案后端中,我们有多个项目。他们中的一些人通过使用对S.dll
的程序集引用来引用项目S的程序集,如下所示:
<Reference Include="ournamespace.S">
<HintPath>..\..\artifacts\Shared\ournamespace.S\ournamespace.S.dll</HintPath>
</Reference>
[当我们建造时,每个作品都很好。但是,从后端解决方案运行我们的Web应用程序W时,会出现以下异常:
System.IO.FileNotFoundException: Could not load file or assembly 'System.Text.Encodings.Web, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The system cannot find the file specified.
[Before]在使用.netstandard2.0(我们使用.net framework 4.7.2)之前和在切换软件包之前,已经将shared项目迁移到“新SDK”项目文件格式。对System.Text.Encodings.Web的引用(我们正在使用<PackageReference Include="AntiXSS" Version="4.3.0" />
),我们没有收到任何错误。
我能想到的唯一方法是,我们需要从S.dll的程序集引用切换为使用nuget-获取S依赖项。
然而,对于我们的shared解决方案项目使用nuget软件包并在backend项目中进行开发,将成为一场噩梦,因为我们需要在S]的每次更改上创建一个新的nuget软件包(并发布)。 ,并且需要一直增加backend项目中软件包引用中的版本号。同样,这将变得非常不切实际,因为我们的开发人员也使用了各种git功能分支(考虑版本控制冲突;必须发布未完成的软件包,并可能使用版本后缀“ alpha _” + {branchName}来区分此版本的来源) 。
如何在localhost上进行开发?是否有一种避免nuget的方法(但可以正确解决其依赖项!)?
我已经读过关于在csproj文件中通过使用条件将nuget包引用用于CI构建的本地开发的程序集引用(但是这在VS2017中也不能很好地工作;这也不能解决我们的依赖问题。上面写在本地主机上的问题)
还有什么其他可能性?关于如何处理此问题,是否有最佳方法?
提前感谢!
P.S。我不想通过使用包引用在每个引用S的项目中包括S的依赖项。这不是解决方案,当S可能由于任何原因而获得新的依赖关系时,就会变得麻烦。
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
解决了我的问题(有关详细信息,请参见How to get .NET Core projects to copy NuGet references to build output?)