Sự khác biệt giữa các loại dự án .NET Core và .NET Standard Class Library là gì?

867
Gigi 2017-03-22 12:34.

Trong Visual Studio, có ít nhất ba loại thư viện lớp khác nhau mà bạn có thể tạo:

  • Thư viện lớp (.NET Framework)
  • Thư viện lớp (Tiêu chuẩn .NET)
  • Thư viện lớp (.NET Core)

Trong khi đầu tiên là những gì chúng tôi đã sử dụng trong nhiều năm, một điểm nhầm lẫn chính mà tôi gặp phải là khi nào sử dụng các loại thư viện lớp .NET Standard và .NET Core. Gần đây, tôi đã bị ảnh hưởng bởi điều này khi cố gắng nhắm mục tiêu nhiều phiên bản khuôn khổ khác nhautạo một dự án thử nghiệm đơn vị .

Vậy, sự khác biệt giữa Thư viện lớp (.NET Standard)Thư viện lớp (.NET Core) là gì , tại sao cả hai đều tồn tại và khi nào chúng ta nên sử dụng cái này thay cho cái kia?

12 answers

655
Shaun Luttin 2017-03-22 13:33.

Khi nào chúng ta nên sử dụng cái này thay cho cái kia?

Quyết định là sự cân bằng giữa khả năng tương thích và quyền truy cập API.

Sử dụng thư viện .NET Standard khi bạn muốn tăng số lượng ứng dụng sẽ tương thích với thư viện của mình và bạn đồng ý với việc giảm diện tích bề mặt .NET API mà thư viện của bạn có thể truy cập.

Sử dụng thư viện .NET Core khi bạn muốn tăng diện tích bề mặt .NET API mà thư viện của bạn có thể truy cập và bạn có thể chỉ cho phép các ứng dụng .NET Core tương thích với thư viện của bạn.

Ví dụ: thư viện nhắm mục tiêu .NET Standard 1.3 sẽ tương thích với các ứng dụng nhắm mục tiêu .NET Framework 4.6, .NET Core 1.0, Universal Windows Platform 10.0 và bất kỳ nền tảng nào khác hỗ trợ .NET Standard 1.3. Tuy nhiên, thư viện sẽ không có quyền truy cập vào một số phần của .NET API. Ví dụ: Microsoft.NETCore.CoreCLRgói tương thích với .NET Core, nhưng không tương thích với .NET Standard.

Sự khác biệt giữa Thư viện lớp (.NET Standard) và Thư viện lớp (.NET Core) là gì?

Khả năng tương thích: Các thư viện nhắm mục tiêu .NET Standard sẽ chạy trên mọi thời gian chạy tuân thủ .NET Standard, chẳng hạn như .NET Core, .NET Framework, Mono / Xamarin . Mặt khác, các thư viện nhắm mục tiêu .NET Core chỉ có thể chạy trong thời gian chạy .NET Core.

Khu vực bề mặt API: Các thư viện .NET Standard đi kèm với mọi thứ NETStandard.Library, trong khi các thư viện .NET Core đi kèm với mọi thứ Microsoft.NETCore.App. Cái sau bao gồm khoảng 20 thư viện bổ sung, một số trong số đó chúng tôi có thể thêm theo cách thủ công vào thư viện .NET Standard của chúng tôi (chẳng hạn như System.Threading.Thread) và một số trong số đó không tương thích với .NET Standard (chẳng hạn như Microsoft.NETCore.CoreCLR).

Ngoài ra, các thư viện .NET Core chỉ định thời gian chạy và đi kèm với một mô hình ứng dụng. Điều đó quan trọng, ví dụ, để làm cho các thư viện lớp kiểm thử đơn vị có thể chạy được.

Tại sao cả hai đều tồn tại?

Bỏ qua các thư viện trong giây lát, lý do .NET Standard tồn tại là vì tính di động; nó xác định một tập hợp các API mà các nền tảng .NET đồng ý triển khai. Bất kỳ nền tảng nào triển khai Tiêu chuẩn .NET đều tương thích với các thư viện nhắm mục tiêu Tiêu chuẩn .NET đó. Một trong những nền tảng tương thích đó là .NET Core.

Quay lại thư viện, các mẫu thư viện Tiêu chuẩn .NET tồn tại để chạy trên nhiều thời gian chạy (với chi phí diện tích bề mặt API). Ngược lại, các mẫu thư viện .NET Core tồn tại để truy cập nhiều diện tích bề mặt API hơn (với chi phí tương thích) và để chỉ định một nền tảng mà dựa vào đó để xây dựng tệp thực thi.

Dưới đây là một ma trận tương tác cho biết Tiêu chuẩn .NET hỗ trợ (các) triển khai .NET nào và diện tích bề mặt API khả dụng.

413
user919426 2017-07-02 03:44.

Một NET Lõi Class Library được xây dựng dựa trên các tiêu chuẩn NET . Nếu bạn muốn triển khai một thư viện có thể di động đến .NET Framework , .NET CoreXamarin , hãy chọn Thư viện chuẩn .NET

.NET Core cuối cùng sẽ triển khai .NET Standard 2 (cũng như Xamarin.NET Framework )

.NET Core , Xamarin.NET Framework , do đó, có thể được xác định là hương vị của .NET Standard

Để chống lại các ứng dụng của bạn trong tương lai để chia sẻ và sử dụng lại mã, bạn muốn triển khai các thư viện .NET Standard.

Microsoft cũng khuyên bạn nên sử dụng .NET Standard thay vì Portable Class Libraries .

Để trích dẫn MSDN như một nguồn có thẩm quyền, Tiêu chuẩn .NET được thiết kế để trở thành Một Thư viện để Quy tắc Tất cả . Như những bức tranh có giá trị hàng ngàn từ, những điều sau đây sẽ làm cho mọi thứ rất rõ ràng:

1. Kịch bản ứng dụng hiện tại của bạn (bị phân mảnh)

Giống như hầu hết chúng ta, có thể bạn đang ở trong tình huống dưới đây: (.NET Framework, Xamarin và bây giờ là các ứng dụng có hương vị .NET Core)

2. Thư viện chuẩn .NET sẽ kích hoạt những gì cho bạn (khả năng tương thích giữa các khuôn khổ)

Việc triển khai Thư viện chuẩn .NET cho phép chia sẻ mã trên tất cả các hương vị khác nhau sau:

Đối với những người thiếu kiên nhẫn:

  1. .NET Standard giải quyết vấn đề chia sẻ mã cho các nhà phát triển .NET trên tất cả các nền tảng bằng cách cung cấp tất cả các API mà bạn mong đợi và yêu thích trên các môi trường mà bạn cần: ứng dụng máy tính để bàn, ứng dụng & trò chơi dành cho thiết bị di động và dịch vụ đám mây:
  2. .NET Standard là một tập hợp các APItất cả các nền tảng .NET phải triển khai . Điều này thống nhất các nền tảng .NETngăn chặn sự phân mảnh trong tương lai .
  3. .NET Standard 2.0 sẽ được thực hiện bởi .NET Framework ,. NET CoreXamarin . Đối với .NET Core , điều này sẽ thêm nhiều API hiện có đã được yêu cầu.
  4. .NET Standard 2.0 bao gồm một miếng đệm tương thích cho các tệp nhị phân .NET Framework , làm tăng đáng kể bộ thư viện mà bạn có thể tham khảo từ các thư viện .NET Standard của mình.
  5. .NET Standard sẽ thay thế các Thư viện Lớp Di động (PCL) như một câu chuyện công cụ để xây dựng các thư viện .NET đa nền tảng.

Để có bảng giúp hiểu phiên bản cao nhất của .NET Standard mà bạn có thể nhắm mục tiêu, dựa trên nền tảng .NET bạn định chạy, hãy xem tại đây .

Nguồn: MSDN: Giới thiệu .NET Standard

94
Joe 2017-03-27 14:39.

Câu trả lời ngắn gọn sẽ là:

IAnimal == .NetStandard (General)
ICat == .NetCore (Less general)
IDog == .NetFramework (Specific / oldest and has the most features)
71
Joel Coehoorn 2017-03-22 14:42.

.NET.NET Core là hai cách triển khai khác nhau của .NET runtime. Cả Core và Framework (nhưng đặc biệt là Framework) đều có các cấu hình khác nhau bao gồm các lựa chọn lớn hơn hoặc nhỏ hơn (hoặc chỉ đơn giản là khác) của nhiều API và tổ hợp Microsoft đã tạo cho .NET, tùy thuộc vào nơi chúng được cài đặt và trong cấu hình nào.

Ví dụ: có một số API khác nhau có sẵn trong các ứng dụng Universal Windows so với trong cấu hình Windows "bình thường". Ngay cả trên Windows, bạn có thể có cấu hình "Máy khách" so với cấu hình "Đầy đủ". Ngoài ra, và có những triển khai khác (như Mono ) có các bộ thư viện riêng.

.NET Standard là một đặc tả mà bộ thư viện và hội đồng API phải có sẵn. Ứng dụng được viết cho .NET Standard 1.0 sẽ có thể biên dịch và chạy với bất kỳ phiên bản Framework, Core, Mono, v.v. nào quảng cáo hỗ trợ cho bộ sưu tập thư viện .NET Standard 1.0. Điều tương tự cũng đúng với .NET Standard 1.1, 1.5, 1.6, 2.0, v.v. Miễn là thời gian chạy cung cấp hỗ trợ cho phiên bản Standard mà chương trình của bạn nhắm mục tiêu, chương trình của bạn sẽ chạy ở đó.

Một dự án được nhắm mục tiêu vào một phiên bản của Tiêu chuẩn sẽ không thể sử dụng các tính năng không có trong bản sửa đổi đó của tiêu chuẩn. Điều này không có nghĩa là bạn không thể nhận các phụ thuộc vào các hội đồng khác hoặc các API được xuất bản bởi các nhà cung cấp khác (ví dụ: các mục trên NuGet). Nhưng điều đó có nghĩa là bất kỳ phụ thuộc nào bạn sử dụng cũng phải bao gồm hỗ trợ cho phiên bản .NET Standard của bạn. .NET Standard đang phát triển nhanh chóng, nhưng nó vẫn đủ mới và đủ quan tâm đến một số cấu hình thời gian chạy nhỏ hơn, hạn chế này có thể khiến bạn cảm thấy ngột ngạt. (Lưu ý một năm rưỡi sau: điều này bắt đầu thay đổi và các phiên bản .NET Standard gần đây đẹp hơn và đầy đủ tính năng hơn nhiều).

Mặt khác, một ứng dụng được nhắm mục tiêu theo Tiêu chuẩn sẽ có thể được sử dụng trong nhiều tình huống triển khai hơn, vì về lý thuyết, nó có thể chạy với Core, Framework, Mono, v.v. Đối với một dự án thư viện lớp tìm kiếm phân phối rộng rãi, đó là một lời hứa hấp dẫn . Đối với một dự án thư viện lớp được sử dụng chủ yếu cho các mục đích nội bộ, nó có thể không được quan tâm nhiều.

.NET Standard cũng có thể hữu ích trong các tình huống mà nhóm quản trị hệ thống muốn chuyển từ ASP.NET trên Windows sang ASP.NET cho .NET Core trên Linux vì lý do triết học hoặc chi phí, nhưng nhóm Phát triển muốn tiếp tục làm việc với. NET Framework trong Visual Studio trên Windows.

32
bside 2018-08-09 02:58.

.NET Framework và .NET Core đều là framework.

.NET Standard là một tiêu chuẩn (nói cách khác, một đặc điểm kỹ thuật).

Bạn có thể tạo một dự án thực thi (như ứng dụng bảng điều khiển hoặc ứng dụng ASP.NET) với .NET Framework và .NET Core, nhưng không phải với .NET Standard.

Với .NET Standard, bạn chỉ có thể tạo một dự án thư viện lớp không thể được thực thi độc lập và phải được tham chiếu bởi một dự án thực thi .NET Core hoặc .NET Framework khác.

21
Dev Kevin 2018-12-11 09:56.

Một cách khác để giải thích sự khác biệt có thể là với các ví dụ trong thế giới thực, vì hầu hết chúng ta chỉ là những người bình thường sẽ sử dụng các công cụ và khuôn khổ hiện có ( Xamarin , Unity , v.v.) để thực hiện công việc.

Vì vậy, với .NET Framework, bạn có tất cả các công cụ .NET để làm việc, nhưng bạn chỉ có thể nhắm mục tiêu các ứng dụng Windows ( UWP , Windows Forms , ASP.NET , v.v.). Vì .NET Framework là mã nguồn đóng nên không có nhiều việc phải làm.

Với .NET Core, bạn có ít công cụ hơn, nhưng bạn có thể nhắm mục tiêu các nền tảng máy tính để bàn chính (Windows, Linux và Mac). Điều này đặc biệt hữu ích trong các ứng dụng ASP.NET Core, vì giờ đây bạn có thể lưu trữ ASP.NET trên Linux (giá lưu trữ rẻ hơn). Bây giờ, vì .NET Core có nguồn mở, nên về mặt kỹ thuật, có thể phát triển các thư viện cho các nền tảng khác. Nhưng vì không có khuôn khổ nào hỗ trợ nó, tôi không nghĩ đó là một ý kiến ​​hay.

Với .NET Standard, bạn thậm chí có ít công cụ hơn, nhưng bạn có thể nhắm mục tiêu tất cả / hầu hết các nền tảng. Bạn có thể nhắm mục tiêu đến thiết bị di động nhờ Xamarin và thậm chí bạn có thể nhắm mục tiêu đến máy chơi game nhờ Mono / Unity. Cũng có thể nhắm mục tiêu các khách hàng web với nền tảng UNO và Blazor (mặc dù cả hai đều đang thử nghiệm ngay bây giờ).

Trong một ứng dụng thế giới thực, bạn có thể cần sử dụng tất cả chúng. Ví dụ: tôi đã phát triển một ứng dụng điểm bán hàng có kiến ​​trúc sau:

Được chia sẻ cả máy chủ và slient:

  • Thư viện .NET Standard xử lý các mô hình ứng dụng của tôi.
  • Thư viện tiêu chuẩn .NET xử lý việc xác thực dữ liệu do máy khách gửi.

Vì là thư viện .NET Standard, nó có thể được sử dụng trong bất kỳ dự án nào khác (máy khách và máy chủ).

Ngoài ra, một lợi thế tuyệt vời của việc xác thực trên thư viện chuẩn .NET vì tôi có thể chắc chắn rằng việc xác thực giống nhau được áp dụng trên máy chủ và máy khách. Máy chủ là bắt buộc, trong khi máy khách là tùy chọn và hữu ích để giảm lưu lượng truy cập.

Phía máy chủ (API Web):

  • Thư viện .NET Standard (có thể là .NET Core) xử lý tất cả các kết nối cơ sở dữ liệu.

  • Dự án .NET Core xử lý API Rest và sử dụng thư viện cơ sở dữ liệu.

Vì ứng dụng này được phát triển trong .NET Core nên tôi có thể lưu trữ ứng dụng trên máy chủ Linux.

Phía khách hàng ( MVVM với WPF + Xamarin.Forms Android / iOS):

  • Thư viện chuẩn .NET xử lý kết nối API máy khách.

  • Thư viện .NET Standard xử lý logic ViewModels . Nó được sử dụng trong tất cả các khung nhìn.

  • Một ứng dụng WPF .NET Framework xử lý các dạng xem WPF cho một ứng dụng windows. Các ứng dụng WPF hiện có thể là lõi .NET, mặc dù hiện tại chúng chỉ hoạt động trên Windows. AvaloniaUI là một giải pháp thay thế tốt để tạo các ứng dụng GUI trên máy tính để bàn cho các nền tảng máy tính để bàn khác.

  • Thư viện chuẩn .NET xử lý các dạng xem biểu mẫu Xamarin.

  • Một dự án Xamarin Android và Xamarin iOS .

Vì vậy, bạn có thể thấy rằng có một lợi thế lớn ở đây ở phía máy khách của ứng dụng, vì tôi có thể sử dụng lại cả thư viện .NET Standard ( API máy khách và ViewModels) và chỉ tạo các chế độ xem không có logic cho các ứng dụng WPF, Xamarin và iOS.

20
Mahbubur Rahman 2018-09-02 03:28.

Tôi hy vọng điều này sẽ giúp hiểu mối quan hệ giữa .NET Standard API surface và các nền tảng .NET khác . Mỗi giao diện đại diện cho một khung mục tiêu và các phương thức đại diện cho các nhóm API có sẵn trên khung mục tiêu đó.

namespace Analogy
{
    // .NET Standard

    interface INetStandard10
    {
        void Primitives();
        void Reflection();
        void Tasks();
        void Xml();
        void Collections();
        void Linq();
    }

    interface INetStandard11 : INetStandard10
    {
        void ConcurrentCollections();
        void LinqParallel();
        void Compression();
        void HttpClient();
    }

    interface INetStandard12 : INetStandard11
    {
        void ThreadingTimer();
    }

    interface INetStandard13 : INetStandard12
    {
        //.NET Standard 1.3 specific APIs
    }

    // And so on ...


    // .NET Framework

    interface INetFramework45 : INetStandard11
    {
        void FileSystem();
        void Console();
        void ThreadPool();
        void Crypto();
        void WebSockets();
        void Process();
        void Drawing();
        void SystemWeb();
        void WPF();
        void WindowsForms();
        void WCF();
    }

    interface INetFramework451 : INetFramework45, INetStandard12
    {
        // .NET Framework 4.5.1 specific APIs
    }

    interface INetFramework452 : INetFramework451, INetStandard12
    {
        // .NET Framework 4.5.2 specific APIs
    }

    interface INetFramework46 : INetFramework452, INetStandard13
    {
        // .NET Framework 4.6 specific APIs
    }

    interface INetFramework461 : INetFramework46, INetStandard14
    {
        // .NET Framework 4.6.1 specific APIs
    }

    interface INetFramework462 : INetFramework461, INetStandard15
    {
        // .NET Framework 4.6.2 specific APIs
    }

    // .NET Core
    interface INetCoreApp10 : INetStandard15
    {
        // TODO: .NET Core 1.0 specific APIs
    }
    // Windows Universal Platform
    interface IWindowsUniversalPlatform : INetStandard13
    {
        void GPS();
        void Xaml();
    }

    // Xamarin
    interface IXamarinIOS : INetStandard15
    {
        void AppleAPIs();
    }

    interface IXamarinAndroid : INetStandard15
    {
        void GoogleAPIs();
    }
    // Future platform

    interface ISomeFuturePlatform : INetStandard13
    {
        // A future platform chooses to implement a specific .NET Standard version.
        // All libraries that target that version are instantly compatible with this new
        // platform
    }

}

Nguồn

12
Peter Mortensen 2017-12-26 17:45.

.NET Standard: Hãy coi nó như một thư viện tiêu chuẩn lớn. Khi sử dụng điều này làm phụ thuộc, bạn chỉ có thể tạo thư viện (.DLL) chứ không phải tệp thực thi. Một thư viện được tạo bằng chuẩn .NET làm phụ thuộc có thể được thêm vào một dự án Xamarin.Android, Xamarin.iOS, .NET Core Windows / OS X / Linux.

.NET Core: Hãy coi nó là sự tiếp nối của .NET framework cũ, chỉ là nó là mã nguồn mở và một số thứ chưa được triển khai và những thứ khác không được dùng nữa. Nó mở rộng tiêu chuẩn .NET với các chức năng bổ sung, nhưng nó chỉ chạy trên máy tính để bàn . Khi thêm điều này làm phụ thuộc, bạn có thể tạo các ứng dụng chạy được trên Windows, Linux và OS X. (Mặc dù hiện tại chỉ có bảng điều khiển, không có GUI). Vì vậy, .NET Core = .NET Standard + công cụ dành riêng cho máy tính để bàn.

Ngoài ra UWP cũng sử dụng nó và ASP.NET Core mới cũng sử dụng nó như một phần phụ thuộc.

8
ARP 2017-08-16 05:50.

.NET Standard tồn tại chủ yếu để cải thiện việc chia sẻ mã và làm cho các API khả dụng trong mỗi lần triển khai .NET nhất quán hơn.

Trong khi tạo thư viện, chúng ta có thể có mục tiêu là .NET Standard 2.0 để thư viện được tạo sẽ tương thích với các phiên bản .NET Framework khác nhau bao gồm .NET Core, Mono , v.v.

2
toannm 2019-05-28 15:33.

Các câu trả lời trước có thể mô tả sự hiểu biết tốt nhất về sự khác biệt giữa .NET Core, .NET Standard và .NET Framework, vì vậy tôi chỉ muốn chia sẻ kinh nghiệm của mình khi chọn cái này hơn cái kia.

Trong dự án mà bạn cần kết hợp giữa .NET Framework, .NET Core và .NET Standard. Ví dụ: tại thời điểm chúng tôi xây dựng hệ thống với .NET Core 1.0, không có hỗ trợ cho Dịch vụ Window lưu trữ với .NET Core.

Lý do tiếp theo là chúng tôi đang sử dụng Báo cáo hoạt động không hỗ trợ .NET Core.

Vì vậy, chúng tôi muốn xây dựng một thư viện cơ sở hạ tầng có thể được sử dụng cho cả .NET Core (ASP.NET Core) và Windows Service and Reporting (.NET Framework) -> Đó là lý do tại sao chúng tôi chọn .NET Standard cho loại thư viện này. Chọn tiêu chuẩn .NET có nghĩa là bạn cần phải xem xét cẩn thận mọi lớp trong thư viện phải đơn giản và chéo .NET (Core, Framework và Standard).

Phần kết luận:

  • .NET Tiêu chuẩn cho thư viện cơ sở hạ tầng và chung được chia sẻ. Thư viện này có thể được tham chiếu bởi .NET Framework và .NET Core.
  • .NET Framework cho các công nghệ không được hỗ trợ như Active Report, Window Services (hiện đã có .NET 3.0 hỗ trợ).
  • Tất nhiên, .NET Core cho ASP.NET Core.

Microsoft vừa công bố .NET 5: Giới thiệu .NET 5

0
Ömer Özkan 2019-11-19 05:14.

Thư viện lớp .NET Core được xây dựng dựa trên Tiêu chuẩn .NET. Nếu bạn muốn triển khai một thư viện có thể di động tới .NET Framework, .NET Core và Xamarin, hãy chọn Thư viện chuẩn .NET.

0
Fabio Panzironi 2019-10-07 22:28.

.Nền tảng NET

Ứng dụng Windows Forms , ASP.NET và WPF phải được phát triển bằng thư viện .NET Framework.

Tiêu chuẩn .NET

Ứng dụng Xamarin, iOS và Mac OS X phải được phát triển bằng thư viện .NET Standard

.NET Core

Ứng dụng Universal Windows Platform (UWP) và Linux phải được phát triển bằng thư viện .NET Core. API được triển khai bằng C ++ và bạn có thể sử dụng các ngôn ngữ C ++, VB.NET, C #, F # và JavaScript.NET

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Trong Saturday Night Live, The Bachelor is Bland và Tina Fey trở lại với vai 'Crazy' Sarah Palin

Trong Saturday Night Live, The Bachelor is Bland và Tina Fey trở lại với vai 'Crazy' Sarah Palin

Sau khi Sarah Palin tán thành Donald Trump vào đầu tuần này, gần như không thể tránh khỏi việc Tina Fey sẽ trở lại Saturday Night Live để thăm lại ấn tượng Palin cổ điển của cô. Và Fey chắc chắn đã không làm thất vọng, cô ấy đã đưa ra một lời khen ngợi không hề nhẹ về bài phát biểu chứng thực Iowa quanh co và khó hiểu của Palin trong khi Trump của Darrell Hammond đưa ra bình luận xuyên suốt.

Đây có phải là sự khởi đầu cho sự kết thúc của việc giam giữ Brittney Griner?

Đây có phải là sự khởi đầu cho sự kết thúc của việc giam giữ Brittney Griner?

Brittney Griner (r.) Ngay từ đầu, thân phận của Brittney Griner đã là tình huống con tin Mỹ độc nhất trong lịch sử hiện đại.

Tom Brady là bộ tứ vệ đầu tiên cuối cùng có thể giúp Julio Jones có hơn 10 lần chạm bóng trong một mùa giải

Tom Brady là bộ tứ vệ đầu tiên cuối cùng có thể giúp Julio Jones có hơn 10 lần chạm bóng trong một mùa giải

Chúng ta có thể thấy nhiều hơn nữa về một Julio Jones khỏe mạnh trong khu vực cuối năm nay. John Parker Wilson, Greg McElroy, A.

Đó phải là Đức

Đó phải là Đức

Đối với đội tuyển Anh, không có kẻ thủ ác nào lớn hơn Hầu hết các cổ động viên Anh, nếu không muốn nói là tất cả, hẳn sẽ phải gật gù khi tiếng còi mãn cuộc của trận bán kết lượt về W Euro 2022 vang lên. Bởi vì nó báo hiệu rằng Đức sẽ chờ đợi ở Wembley trong trận chung kết với Anh và là điều duy nhất giữa Anh và chiếc cúp lớn đầu tiên của đội tuyển nữ.

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"

Đường băng hạ cánh

Đường băng hạ cánh

Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.

Language