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