به آنها نیازی نیست. امکان تهیهی وابستگیها به صورت خودکار هم وجود دارد: «قالبی خودکار برای تهیهی بستههای نیوگت»
نظرات مطالب
//Define your hosted service with startup logic public class MyHostedService : IHostedService { public async Task StartAsync(CancellationToken cancellationToken) { //Startup logic here } public async Task StopAsync(CancellationToken cancellationToken) { //Cleanup logic here } } //Register hosted service public void ConfigureServices(IServiceCollection services) { services.AddHostedService<MyHostedService>(); }
//"Main" method public static void Main(string[] args) { var host = CreateHostBuilder(args).Build(); //Startup logic here host.Run(); }
namespace MergeAssembliesIntoWPF.ViewModels { public class ViewModel1 { public string Data { set; get; } public ViewModel1() { Data = "Test"; } } }
<UserControl x:Class="MergeAssembliesIntoWPF.Shell.View1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" xmlns:VM="clr-namespace:MergeAssembliesIntoWPF.ViewModels;assembly=MergeAssembliesIntoWPF.ViewModels" d:DesignHeight="300" d:DesignWidth="300"> <UserControl.Resources> <VM:ViewModel1 x:Key="ViewModel1" /> </UserControl.Resources> <Grid DataContext="{Binding Source={StaticResource ViewModel1}}"> <TextBlock Text="{Binding Data}" /> </Grid> </UserControl>
<Window x:Class="MergeAssembliesIntoWPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:V="clr-namespace:MergeAssembliesIntoWPF.Shell;assembly=MergeAssembliesIntoWPF.Shell" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <V:View1 x:Key="View1" /> </Window.Resources> <Grid> <V:View1 /> </Grid> </Window>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="AfterResolveReferences"> <ItemGroup> <EmbeddedResource Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.Extension)' == '.dll'"> <LogicalName>%(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension)</LogicalName> </EmbeddedResource> </ItemGroup> </Target>
using System; using System.Globalization; using System.Reflection; namespace MergeAssembliesIntoWPF { public class Program { [STAThreadAttribute] public static void Main() { AppDomain.CurrentDomain.AssemblyResolve += OnResolveAssembly; App.Main(); } private static Assembly OnResolveAssembly(object sender, ResolveEventArgs args) { var executingAssembly = Assembly.GetExecutingAssembly(); var assemblyName = new AssemblyName(args.Name); var path = assemblyName.Name + ".dll"; if (assemblyName.CultureInfo.Equals(CultureInfo.InvariantCulture) == false) { path = String.Format(@"{0}\{1}", assemblyName.CultureInfo, path); } using (var stream = executingAssembly.GetManifestResourceStream(path)) { if (stream == null) return null; var assemblyRawBytes = new byte[stream.Length]; stream.Read(assemblyRawBytes, 0, assemblyRawBytes.Length); return Assembly.Load(assemblyRawBytes); } } } }
انجام اینکار ضروری است؛ در غیراینصورت با متد Main موجود در فایل App.g.i.cs تداخل میکند.