我正在尝试在.NET Core MVC Api中创建模块化web api。我之前在经典的.NET中做过这个,但是我使用了MEF。我的所有插件容器都在不同的NuGet包中,我会相应地恢复它们。 但是,在新版本中,NuGet包存储在常规文件夹中而不是解决方案中。为了我的脚本找到插件(通过接口)我需要加载我的程序集,但我找不到它们,因为NuGet包的DLL不再在解决方案中。
我可以将NuGet的恢复目录设置为我的解决方案吗?或者还有其他方法可以解决这个问题。
由于
---- ----更新
感谢UserName提出了这个解决方案:
编辑MVC API的CSPROJ文件并更改:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.6" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.3" />
<PackageReference Include="NeedsToBeLocal" Version="1.1.0" />
</ItemGroup>
对此:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.6" ExcludeAssets="Runtime"/>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.3" ExcludeAssets="Runtime"/>
<PackageReference Include="NeedsToBeLocal" Version="1.1.0" />
</ItemGroup>
(请注意ExcludeAssets =&#34; Runtime&#34;)。
接下来,添加以下属性组:
<PropertyGroup>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>
最后,将这些目标添加到CSPROJ:
<Target Name="CopyAdditionalFilesToLayout" Condition="'$(TargetFramework)' == ''" DependsOnTargets="PrepareAdditionalFilesToLayout" AfterTargets="Build" Inputs="@(LayoutFile)" Outputs="@(LayoutFile->'$(PackageLayoutOutputPath)%(TargetPath)')">
<Copy SourceFiles="@(LayoutFile)" DestinationFiles="@(LayoutFile->'$(PackageLayoutOutputPath)%(TargetPath)')">
<Output TaskParameter="DestinationFiles" ItemName="FileWrites" />
</Copy>
</Target>
<Target Name="FilterCopyLocal" DependsOnTargets="GetFrameworkPaths;GetReferenceAssemblyPaths;RunResolvePublishAssemblies" BeforeTargets="ResolveLockFileCopyLocalProjectDeps">
<ItemGroup>
<_CopyLocalButNotPublished Include="@(AllCopyLocalItems)" Exclude="@(ResolvedAssembliesToPublish)" />
<AllCopyLocalItems Remove="@(_CopyLocalButNotPublished)" />
</ItemGroup>
</Target>
清洁&amp;重建和正确的库将被复制到调试文件夹(在我的情况下为netcoreapp2.0)。
答案 0 :(得分:1)
其中一种可能的方法是在项目中使用RestorePackagesPath属性:
<PropertyGroup>
<RestorePackagesPath>..\packages</RestorePackagesPath>
</PropertyGroup>
RestorePackagesPath - 用户包文件夹的路径。全部下载了 这里提取包。相当于--netnet中的--packages 还原
您可以使用CopyLocalLockFileAssemblies
属性。如果它设置为true
,则依赖项将从NuGet缓存复制到输出文件夹。
<PropertyGroup>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>