Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core Aspnetcore:如何发布松散耦合的项目?_Asp.net Core_Deployment - Fatal编程技术网

Asp.net core Aspnetcore:如何发布松散耦合的项目?

Asp.net core Aspnetcore:如何发布松散耦合的项目?,asp.net-core,deployment,Asp.net Core,Deployment,我有一个包含几个松散耦合组件的解决方案。 发布时,应将组件及其所有依赖项复制到主应用程序的子文件夹中 例如: 我的解决方案包含两个项目: 主应用程序 达尔 MainApp包含应用程序的主要入口点。DAL依赖于在MainApp中定义的一些接口,并在运行时由MainApp加载。然而,请注意,MainApp对DAL没有依赖性。发布时,DAL的输出及其依赖项应复制到MainApp输出文件夹,以便在运行时可用 在编译时,本例中的addin项目会复制到主应用程序的模块中,如下所示: <Target

我有一个包含几个松散耦合组件的解决方案。 发布时,应将组件及其所有依赖项复制到主应用程序的子文件夹中

例如: 我的解决方案包含两个项目:

主应用程序

达尔

MainApp包含应用程序的主要入口点。DAL依赖于在MainApp中定义的一些接口,并在运行时由MainApp加载。然而,请注意,MainApp对DAL没有依赖性。发布时,DAL的输出及其依赖项应复制到MainApp输出文件夹,以便在运行时可用

在编译时,本例中的addin项目会复制到主应用程序的模块中,如下所示:

  <Target Name="MakeAddinsDirectories" AfterTargets="Build">
      <MakeDir Directories="$(MainAppAddinsDirectory)" />
  </Target>
  <Target Name="CopyOutputFiles" AfterTargets="MakeAddinsDirectories">
      <Copy SourceFiles="@(AddinFiles)" DestinationFOlder="$(MainAppAddinsDirectory)" />
  </Target>
因此,在调试时,它们可用于MainApp


将DAL等加载项发布到MainApp的最佳方式是什么?

根据新的解释更新:

我猜您希望应用插件模型从子文件夹动态添加DAL库。因此,它需要您了解一些脚本。基本上,您可以使用带有PreBuildEvent的MsBuild来触发dotnet build-o{your sub path}来强制dotnet生成DAL项目并复制到子文件夹

编辑MainApp.csproj并在下面添加节点

 <Project>
// Some xml nodes
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
     <Exec Command="dotnet build {your DAL path}/DAL.csproj -o {your sub path}" />
</Target>
</Project>

但是,我不知道您的解决方案有多大,但它是5-6个项目下的一些项目,我建议您添加引用所有项目,而不是使用上述脚本。为什么?因为它会让你面临一个复杂的管理。

你想要的是不可能的。如果DAL依赖于MainApp,则MainApp不能依赖于DAL,无论该依赖是在编译时还是在运行时。这将是一个循环引用


您应该做的是将接口移出到单独的类库中,DAL将依赖于该类库而不是MainApp。然后MainApp可以直接引用DAL。

这不是OP所要求的。@JohnathanLe谢谢!这是一种拉模式,MainApp在该模式下拉项目。我更新了我的问题,显示了一种推送模式,在这种模式下,外接程序在编译时将自己复制到主项目的输出目录中。这样,主项目不知道外接程序。不过我有这个想法。谢谢因此,在本例中,我认为您应该准备一个Powershell/Bash脚本。在这个脚本中,您需要声明一个包含所有插件的加载项文件夹,名为DALEx:*/AddIns/*.csproj,然后使用dotnet build-o{sub path}循环这些文件。接下来,你想在MainApp中添加PreBuildEvent来触发这个脚本。没有好的方法来做你想做的事情,主要是因为这是一个非常糟糕的主意。你不能随意地把一些东西松散地结合在一起。若MainApp依赖于DAL,那个么这是一个紧密耦合,对此你们无能为力。你应该在MainApp中添加对DAL的引用,让一切自然发生。依赖关系是一种依赖关系,你不能只是希望它消失。@ChrisPratt:依赖关系是相反的:MainApp有几个接口;我只是执行它们。可能有许多项目实现相同的接口。它们在运行时由MainAppe发现。我只希望DAL中的实现可用。