Browse Source

Merge pull request #4540 from abpframework/vfs-embedded

Implemented: Support embedded files with manifest created by Microsoft.Extensions.FileProviders.Embedded
pull/4543/head
Halil İbrahim Kalkan 6 years ago
committed by GitHub
parent
commit
047f8907fa
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj
  2. 2
      framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/AbpVirtualFileSystemOptions.cs
  3. 29
      framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/AbpEmbeddedFileProvider.cs
  4. 22
      framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedVirtualFileSetInfo.cs
  5. 10
      framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/IVirtualFileSet.cs
  6. 19
      framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Physical/PhysicalVirtualFileSetInfo.cs
  7. 2
      framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFilePathHelper.cs
  8. 52
      framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs
  9. 15
      framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetInfo.cs
  10. 9
      framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetList.cs
  11. 82
      framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetListExtensions.cs
  12. 2
      framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo.Abp.VirtualFileSystem.Tests.csproj
  13. 1
      framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/MyResources/js/my{test}.2.9.min.js
  14. 25
      framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/VirtualFileProvider_Tests.cs
  15. 7
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj
  16. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs
  17. 4
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs
  18. 2
      templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json
  19. 5
      templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj
  20. 2
      templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs

1
framework/src/Volo.Abp.VirtualFileSystem/Volo.Abp.VirtualFileSystem.csproj

@ -17,6 +17,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Composite" Version="3.1.5" /> <PackageReference Include="Microsoft.Extensions.FileProviders.Composite" Version="3.1.5" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="3.1.5" /> <PackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="3.1.5" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="3.1.5" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

2
framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/AbpVirtualFileSystemOptions.cs

@ -3,7 +3,7 @@
public class AbpVirtualFileSystemOptions public class AbpVirtualFileSystemOptions
{ {
public VirtualFileSetList FileSets { get; } public VirtualFileSetList FileSets { get; }
public AbpVirtualFileSystemOptions() public AbpVirtualFileSystemOptions()
{ {
FileSets = new VirtualFileSetList(); FileSets = new VirtualFileSetList();

29
framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedFileSet.cs → framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/AbpEmbeddedFileProvider.cs

@ -8,7 +8,7 @@ using Microsoft.Extensions.FileProviders;
namespace Volo.Abp.VirtualFileSystem.Embedded namespace Volo.Abp.VirtualFileSystem.Embedded
{ {
public class EmbeddedFileSet : IVirtualFileSet public class AbpEmbeddedFileProvider : DictionaryBasedFileProvider
{ {
[NotNull] [NotNull]
public Assembly Assembly { get; } public Assembly Assembly { get; }
@ -16,19 +16,22 @@ namespace Volo.Abp.VirtualFileSystem.Embedded
[CanBeNull] [CanBeNull]
public string BaseNamespace { get; } public string BaseNamespace { get; }
[CanBeNull] protected override IDictionary<string, IFileInfo> Files => _files.Value;
public string BaseFolderInProject { get; } private readonly Lazy<Dictionary<string, IFileInfo>> _files;
public EmbeddedFileSet( public AbpEmbeddedFileProvider(
[NotNull] Assembly assembly, [NotNull] Assembly assembly,
[CanBeNull] string baseNamespace = null, [CanBeNull] string baseNamespace = null)
[CanBeNull] string baseFolderInProject = null)
{ {
Check.NotNull(assembly, nameof(assembly)); Check.NotNull(assembly, nameof(assembly));
Assembly = assembly; Assembly = assembly;
BaseNamespace = baseNamespace; BaseNamespace = baseNamespace;
BaseFolderInProject = baseFolderInProject;
_files = new Lazy<Dictionary<string, IFileInfo>>(
CreateFiles,
true
);
} }
public void AddFiles(Dictionary<string, IFileInfo> files) public void AddFiles(Dictionary<string, IFileInfo> files)
@ -127,5 +130,17 @@ namespace Volo.Abp.VirtualFileSystem.Embedded
return filePath.Substring(filePath.LastIndexOf("/", StringComparison.Ordinal) + 1); return filePath.Substring(filePath.LastIndexOf("/", StringComparison.Ordinal) + 1);
} }
protected override string NormalizePath(string subpath)
{
return VirtualFilePathHelper.NormalizePath(subpath);
}
private Dictionary<string, IFileInfo> CreateFiles()
{
var files = new Dictionary<string, IFileInfo>(StringComparer.OrdinalIgnoreCase);
AddFiles(files);
return files;
}
} }
} }

22
framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Embedded/EmbeddedVirtualFileSetInfo.cs

@ -0,0 +1,22 @@
using System.Reflection;
using Microsoft.Extensions.FileProviders;
namespace Volo.Abp.VirtualFileSystem.Embedded
{
public class EmbeddedVirtualFileSetInfo : VirtualFileSetInfo
{
public Assembly Assembly { get; }
public string BaseFolder { get; }
public EmbeddedVirtualFileSetInfo(
IFileProvider fileProvider,
Assembly assembly,
string baseFolder = null)
: base(fileProvider)
{
Assembly = assembly;
BaseFolder = baseFolder;
}
}
}

10
framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/IVirtualFileSet.cs

@ -1,10 +0,0 @@
using System.Collections.Generic;
using Microsoft.Extensions.FileProviders;
namespace Volo.Abp.VirtualFileSystem
{
public interface IVirtualFileSet
{
void AddFiles(Dictionary<string, IFileInfo> files);
}
}

19
framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/Physical/PhysicalVirtualFileSetInfo.cs

@ -0,0 +1,19 @@
using JetBrains.Annotations;
using Microsoft.Extensions.FileProviders;
namespace Volo.Abp.VirtualFileSystem.Physical
{
public class PhysicalVirtualFileSetInfo : VirtualFileSetInfo
{
public string Root { get; }
public PhysicalVirtualFileSetInfo(
[NotNull] IFileProvider fileProvider,
[NotNull] string root
)
: base(fileProvider)
{
Root = Check.NotNullOrWhiteSpace(root, nameof(root));
}
}
}

2
framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFilePathHelper.cs

@ -6,8 +6,6 @@ namespace Volo.Abp.VirtualFileSystem
{ {
internal static class VirtualFilePathHelper internal static class VirtualFilePathHelper
{ {
//TODO: Optimize this class!
public static string NormalizePath(string fullPath) public static string NormalizePath(string fullPath)
{ {
if (fullPath.Equals("/", StringComparison.Ordinal)) if (fullPath.Equals("/", StringComparison.Ordinal))

52
framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileProvider.cs

@ -1,5 +1,4 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@ -28,6 +27,11 @@ namespace Volo.Abp.VirtualFileSystem
public virtual IDirectoryContents GetDirectoryContents(string subpath) public virtual IDirectoryContents GetDirectoryContents(string subpath)
{ {
if (subpath == "")
{
subpath = "/";
}
return _hybridFileProvider.GetDirectoryContents(subpath); return _hybridFileProvider.GetDirectoryContents(subpath);
} }
@ -42,52 +46,12 @@ namespace Volo.Abp.VirtualFileSystem
fileProviders.Add(dynamicFileProvider); fileProviders.Add(dynamicFileProvider);
if (_options.FileSets.PhysicalPaths.Any()) foreach (var fileSet in _options.FileSets.AsEnumerable().Reverse())
{ {
fileProviders.AddRange( fileProviders.Add(fileSet.FileProvider);
_options.FileSets.PhysicalPaths
.Select(rootPath => new PhysicalFileProvider(rootPath))
.Reverse()
);
} }
fileProviders.Add(new InternalVirtualFileProvider(_options));
return new CompositeFileProvider(fileProviders); return new CompositeFileProvider(fileProviders);
} }
protected class InternalVirtualFileProvider : DictionaryBasedFileProvider
{
protected override IDictionary<string, IFileInfo> Files => _files.Value;
private readonly AbpVirtualFileSystemOptions _options;
private readonly Lazy<Dictionary<string, IFileInfo>> _files;
public InternalVirtualFileProvider(AbpVirtualFileSystemOptions options)
{
_options = options;
_files = new Lazy<Dictionary<string, IFileInfo>>(
CreateFiles,
true
);
}
private Dictionary<string, IFileInfo> CreateFiles()
{
var files = new Dictionary<string, IFileInfo>(StringComparer.OrdinalIgnoreCase);
foreach (var set in _options.FileSets)
{
set.AddFiles(files);
}
return files;
}
protected override string NormalizePath(string subpath)
{
return VirtualFilePathHelper.NormalizePath(subpath);
}
}
} }
} }

15
framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetInfo.cs

@ -0,0 +1,15 @@
using JetBrains.Annotations;
using Microsoft.Extensions.FileProviders;
namespace Volo.Abp.VirtualFileSystem
{
public class VirtualFileSetInfo
{
public IFileProvider FileProvider { get; }
public VirtualFileSetInfo([NotNull] IFileProvider fileProvider)
{
FileProvider = Check.NotNull(fileProvider, nameof(fileProvider));
}
}
}

9
framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetList.cs

@ -2,13 +2,8 @@
namespace Volo.Abp.VirtualFileSystem namespace Volo.Abp.VirtualFileSystem
{ {
public class VirtualFileSetList : List<IVirtualFileSet> public class VirtualFileSetList : List<VirtualFileSetInfo>
{ {
public List<string> PhysicalPaths { get; }
public VirtualFileSetList()
{
PhysicalPaths = new List<string>();
}
} }
} }

82
framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetListExtensions.cs

@ -1,44 +1,90 @@
using System; using System;
using System.IO; using System.IO;
using System.Linq; using System.Reflection;
using JetBrains.Annotations; using JetBrains.Annotations;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.FileProviders.Physical;
using Volo.Abp.VirtualFileSystem.Embedded; using Volo.Abp.VirtualFileSystem.Embedded;
using Volo.Abp.VirtualFileSystem.Physical;
namespace Volo.Abp.VirtualFileSystem namespace Volo.Abp.VirtualFileSystem
{ {
public static class VirtualFileSetListExtensions public static class VirtualFileSetListExtensions
{ {
public static void AddEmbedded<T>([NotNull] this VirtualFileSetList list, [CanBeNull] string baseNamespace = null, string baseFolderInProject = null) public static void AddEmbedded<T>(
[NotNull] this VirtualFileSetList list,
[CanBeNull] string baseNamespace = null,
[CanBeNull] string baseFolder = null)
{ {
Check.NotNull(list, nameof(list)); Check.NotNull(list, nameof(list));
list.Add( var assembly = typeof(T).Assembly;
new EmbeddedFileSet( var fileProvider = CreateFileProvider(
typeof(T).Assembly, assembly,
baseNamespace, baseNamespace,
baseFolderInProject baseFolder
)
); );
list.Add(new EmbeddedVirtualFileSetInfo(fileProvider, assembly, baseFolder));
} }
public static void ReplaceEmbeddedByPhysical<T>([NotNull] this VirtualFileSetList list, [NotNull] string pyhsicalPath) public static void AddPhysical(
[NotNull] this VirtualFileSetList list,
[NotNull] string root,
ExclusionFilters exclusionFilters = ExclusionFilters.Sensitive)
{ {
Check.NotNull(list, nameof(list)); Check.NotNull(list, nameof(list));
Check.NotNull(pyhsicalPath, nameof(pyhsicalPath)); Check.NotNullOrWhiteSpace(root, nameof(root));
var assembly = typeof(T).Assembly; var fileProvider = new PhysicalFileProvider(root, exclusionFilters);
var embeddedFileSets = list.OfType<EmbeddedFileSet>().Where(fs => fs.Assembly == assembly).ToList(); list.Add(new PhysicalVirtualFileSetInfo(fileProvider, root));
}
private static IFileProvider CreateFileProvider(
[NotNull] Assembly assembly,
[CanBeNull] string baseNamespace = null,
[CanBeNull] string baseFolder = null)
{
Check.NotNull(assembly, nameof(assembly));
foreach (var embeddedFileSet in embeddedFileSets) var info = assembly.GetManifestResourceInfo("Microsoft.Extensions.FileProviders.Embedded.Manifest.xml");
if (info == null)
{ {
list.Remove(embeddedFileSet); return new AbpEmbeddedFileProvider(assembly, baseNamespace);
}
if (baseFolder == null)
{
return new ManifestEmbeddedFileProvider(assembly);
}
if (!embeddedFileSet.BaseFolderInProject.IsNullOrEmpty()) return new ManifestEmbeddedFileProvider(assembly, baseFolder);
}
public static void ReplaceEmbeddedByPhysical<T>(
[NotNull] this VirtualFileSetList fileSets,
[NotNull] string physicalPath)
{
Check.NotNull(fileSets, nameof(fileSets));
Check.NotNullOrWhiteSpace(physicalPath, nameof(physicalPath));
var assembly = typeof(T).Assembly;
for (var i = 0; i < fileSets.Count; i++)
{
if (fileSets[i] is EmbeddedVirtualFileSetInfo embeddedVirtualFileSet &&
embeddedVirtualFileSet.Assembly == assembly)
{ {
pyhsicalPath = Path.Combine(pyhsicalPath, embeddedFileSet.BaseFolderInProject); var thisPath = physicalPath;
}
list.PhysicalPaths.Add(pyhsicalPath); if (!embeddedVirtualFileSet.BaseFolder.IsNullOrEmpty())
{
thisPath = Path.Combine(thisPath, embeddedVirtualFileSet.BaseFolder);
}
fileSets[i] = new PhysicalVirtualFileSetInfo(new PhysicalFileProvider(thisPath), thisPath);
}
} }
} }
} }

2
framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo.Abp.VirtualFileSystem.Tests.csproj

@ -4,6 +4,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>netcoreapp3.1</TargetFramework>
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
<RootNamespace /> <RootNamespace />
</PropertyGroup> </PropertyGroup>
@ -15,6 +16,7 @@
<ProjectReference Include="..\AbpTestBase\AbpTestBase.csproj" /> <ProjectReference Include="..\AbpTestBase\AbpTestBase.csproj" />
<ProjectReference Include="..\..\src\Volo.Abp.VirtualFileSystem\Volo.Abp.VirtualFileSystem.csproj" /> <ProjectReference Include="..\..\src\Volo.Abp.VirtualFileSystem\Volo.Abp.VirtualFileSystem.csproj" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="3.1.5" />
</ItemGroup> </ItemGroup>
</Project> </Project>

1
framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/MyResources/js/my{test}.2.9.min.js

@ -0,0 +1 @@
//my{test}.2.9.min.js-content

25
framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo/Abp/VirtualFileSystem/VirtualFileProvider_Tests.cs

@ -1,5 +1,4 @@
using System; using System.IO;
using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
@ -34,6 +33,22 @@ namespace Volo.Abp.VirtualFileSystem
Encoding.UTF8.GetString(stream.GetAllBytes()).ShouldBe("//jquery-3-1-1-min.js-contents"); Encoding.UTF8.GetString(stream.GetAllBytes()).ShouldBe("//jquery-3-1-1-min.js-contents");
} }
} }
[Fact]
public void Should_Define_And_Get_Embedded_Resources_With_Special_Chars()
{
//Act
var resource = _virtualFileProvider.GetFileInfo("/js/my{test}.2.9.min.js");
//Assert
resource.ShouldNotBeNull();
resource.Exists.ShouldBeTrue();
using (var stream = resource.CreateReadStream())
{
Encoding.UTF8.GetString(stream.GetAllBytes()).ShouldBe("//my{test}.2.9.min.js-content");
}
}
[Fact] [Fact]
public void Should_Define_And_Get_Embedded_Directory_Contents() public void Should_Define_And_Get_Embedded_Directory_Contents()
@ -45,7 +60,9 @@ namespace Volo.Abp.VirtualFileSystem
contents.Exists.ShouldNotBeNull(); contents.Exists.ShouldNotBeNull();
var contentList = contents.ToList(); var contentList = contents.ToList();
contentList.ShouldContain(x => x.Name == "jquery-3-1-1-min.js"); contentList.ShouldContain(x => x.Name == "jquery-3-1-1-min.js");
contentList.ShouldContain(x => x.Name == "my{test}.2.9.min.js");
} }
[Theory] [Theory]
@ -70,7 +87,9 @@ namespace Volo.Abp.VirtualFileSystem
{ {
Configure<AbpVirtualFileSystemOptions>(options => Configure<AbpVirtualFileSystemOptions>(options =>
{ {
options.FileSets.AddEmbedded<TestModule>("Volo.Abp.VirtualFileSystem.MyResources"); options.FileSets.AddEmbedded<TestModule>(
baseFolder: "/Volo/Abp/VirtualFileSystem/MyResources"
);
}); });
} }
} }

7
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj

@ -5,8 +5,9 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>MyCompanyName.MyProjectName</RootNamespace> <RootNamespace>MyCompanyName.MyProjectName</RootNamespace>
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\..\..\modules\identity\src\Volo.Abp.Identity.Domain.Shared\Volo.Abp.Identity.Domain.Shared.csproj" /> <ProjectReference Include="..\..\..\..\..\modules\identity\src\Volo.Abp.Identity.Domain.Shared\Volo.Abp.Identity.Domain.Shared.csproj" />
<ProjectReference Include="..\..\..\..\..\modules\identityserver\src\Volo.Abp.IdentityServer.Domain.Shared\Volo.Abp.IdentityServer.Domain.Shared.csproj" /> <ProjectReference Include="..\..\..\..\..\modules\identityserver\src\Volo.Abp.IdentityServer.Domain.Shared\Volo.Abp.IdentityServer.Domain.Shared.csproj" />
@ -23,4 +24,8 @@
<Content Remove="Localization\MyProjectName\*.json" /> <Content Remove="Localization\MyProjectName\*.json" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="3.1.5" />
</ItemGroup>
</Project> </Project>

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs

@ -35,7 +35,7 @@ namespace MyCompanyName.MyProjectName
{ {
Configure<AbpVirtualFileSystemOptions>(options => Configure<AbpVirtualFileSystemOptions>(options =>
{ {
options.FileSets.AddEmbedded<MyProjectNameDomainSharedModule>("MyCompanyName.MyProjectName"); options.FileSets.AddEmbedded<MyProjectNameDomainSharedModule>();
}); });
Configure<AbpLocalizationOptions>(options => Configure<AbpLocalizationOptions>(options =>

4
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs

@ -77,8 +77,6 @@ namespace MyCompanyName.MyProjectName
{ {
Configure<AbpVirtualFileSystemOptions>(options => Configure<AbpVirtualFileSystemOptions>(options =>
{ {
options.FileSets.ReplaceEmbeddedByPhysical<MyProjectNameDomainSharedModule>(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Domain.Shared"));
options.FileSets.ReplaceEmbeddedByPhysical<MyProjectNameDomainModule>(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Domain"));
//<TEMPLATE-REMOVE> //<TEMPLATE-REMOVE>
options.FileSets.ReplaceEmbeddedByPhysical<AbpUiModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}..{0}framework{0}src{0}Volo.Abp.UI", Path.DirectorySeparatorChar))); options.FileSets.ReplaceEmbeddedByPhysical<AbpUiModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}..{0}framework{0}src{0}Volo.Abp.UI", Path.DirectorySeparatorChar)));
options.FileSets.ReplaceEmbeddedByPhysical<AbpAspNetCoreMvcUiModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}..{0}framework{0}src{0}Volo.Abp.AspNetCore.Mvc.UI", Path.DirectorySeparatorChar))); options.FileSets.ReplaceEmbeddedByPhysical<AbpAspNetCoreMvcUiModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}..{0}framework{0}src{0}Volo.Abp.AspNetCore.Mvc.UI", Path.DirectorySeparatorChar)));
@ -87,6 +85,8 @@ namespace MyCompanyName.MyProjectName
options.FileSets.ReplaceEmbeddedByPhysical<AbpAspNetCoreMvcUiBasicThemeModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}..{0}framework{0}src{0}Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic", Path.DirectorySeparatorChar))); options.FileSets.ReplaceEmbeddedByPhysical<AbpAspNetCoreMvcUiBasicThemeModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}..{0}framework{0}src{0}Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic", Path.DirectorySeparatorChar)));
options.FileSets.ReplaceEmbeddedByPhysical<AbpAccountWebModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}..{0}modules{0}account{0}src{0}Volo.Abp.Account.Web", Path.DirectorySeparatorChar))); options.FileSets.ReplaceEmbeddedByPhysical<AbpAccountWebModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}..{0}modules{0}account{0}src{0}Volo.Abp.Account.Web", Path.DirectorySeparatorChar)));
//</TEMPLATE-REMOVE> //</TEMPLATE-REMOVE>
options.FileSets.ReplaceEmbeddedByPhysical<MyProjectNameDomainSharedModule>(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Domain.Shared"));
options.FileSets.ReplaceEmbeddedByPhysical<MyProjectNameDomainModule>(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Domain"));
}); });
} }

2
templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/tr.json

@ -1,6 +1,6 @@
{ {
"culture": "tr", "culture": "tr",
"texts": { "texts": {
"ManageYourProfile": "Profil yönetimi" "ManageYourProfile": "Profil yönetimi"
} }
} }

5
templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyCompanyName.MyProjectName.Domain.Shared.csproj

@ -5,12 +5,17 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>MyCompanyName.MyProjectName</RootNamespace> <RootNamespace>MyCompanyName.MyProjectName</RootNamespace>
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Validation\Volo.Abp.Validation.csproj" /> <ProjectReference Include="..\..\..\..\..\framework\src\Volo.Abp.Validation\Volo.Abp.Validation.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="3.1.5" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="Localization\MyProjectName\*.json" /> <EmbeddedResource Include="Localization\MyProjectName\*.json" />
<Content Remove="Localization\MyProjectName\*.json" /> <Content Remove="Localization\MyProjectName\*.json" />

2
templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/MyProjectNameDomainSharedModule.cs

@ -17,7 +17,7 @@ namespace MyCompanyName.MyProjectName
{ {
Configure<AbpVirtualFileSystemOptions>(options => Configure<AbpVirtualFileSystemOptions>(options =>
{ {
options.FileSets.AddEmbedded<MyProjectNameDomainSharedModule>("MyCompanyName.MyProjectName"); options.FileSets.AddEmbedded<MyProjectNameDomainSharedModule>();
}); });
Configure<AbpLocalizationOptions>(options => Configure<AbpLocalizationOptions>(options =>

Loading…
Cancel
Save