Xử lý các lỗi chạy project Asp.net khi upgrade lên Visual studio 2017 15.3+

Xử lý các lỗi chạy project Asp.net khi upgrade lên Visual studio 2017 15.3+

1. Lỗi “Duplicate ‘Content’ items were included”

Cách xử lý: Edit file .csproj và thêm vào false trong đầu tiên

2. Lỗi “Cannot find assembly file Microsoft.CSharp.dll”

Cách xử lý: Edit file .csproj và thêm vào (có thể search từ khóa PackageReference trong file csproj để biết chỗ cần thêm)

3. Lỗi “Cannot resolve assembly paths for reference compilation libraries”

Cách xử lý: (tham khảo)
Cần custom MetadataReferenceFeature để không throw lỗi render view. Bằng cách vào Startup.cs

services.AddMvc()
    .ConfigureApplicationPartManager(manager =>
    {
        var oldMetadataReferenceFeatureProvider = manager.FeatureProviders.First(f => f is MetadataReferenceFeatureProvider);
        manager.FeatureProviders.Remove(oldMetadataReferenceFeatureProvider);
        manager.FeatureProviders.Add(new ReferencesMetadataReferenceFeatureProvider());
    });

Cài đặt class ReferencesMetadataReferenceFeatureProvider:

public class ReferencesMetadataReferenceFeatureProvider : IApplicationFeatureProvider<MetadataReferenceFeature>
    {
        public void PopulateFeature(IEnumerable<ApplicationPart> parts, MetadataReferenceFeature feature)
        {
            var libraryPaths = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
            foreach (var assemblyPart in parts.OfType<AssemblyPart>())
            {
                var dependencyContext = DependencyContext.Load(assemblyPart.Assembly);
                if (dependencyContext != null)
                {
                    foreach (var library in dependencyContext.CompileLibraries)
                    {
                        if (string.Equals("reference", library.Type, StringComparison.OrdinalIgnoreCase))
                        {
                            foreach (var libraryAssembly in library.Assemblies)
                            {
                              libraryPaths.Add(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, libraryAssembly));
                            }
                        }
                        else
                        {
                            foreach (var path in library.ResolveReferencePaths())
                            {
                                libraryPaths.Add(path);
                            }
                        }
                    }
                }
                else
                {
                    libraryPaths.Add(assemblyPart.Assembly.Location);
                }
            }

            foreach (var path in libraryPaths)
            {
                feature.MetadataReferences.Add(CreateMetadataReference(path));
            }
        }

        private static MetadataReference CreateMetadataReference(string path)
        {
            using (var stream = File.OpenRead(path))
            {
                var moduleMetadata = ModuleMetadata.CreateFromStream(stream, PEStreamOptions.PrefetchMetadata);
                var assemblyMetadata = AssemblyMetadata.Create(moduleMetadata);

                return assemblyMetadata.GetReference(filePath: path);
            }
        }
    }

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s