From 8e70b30b523ddd40aa96976f0baac5f06c0e4b8a Mon Sep 17 00:00:00 2001 From: Genevieve Warren <24882762+gewarren@users.noreply.github.com> Date: Sun, 19 Jan 2025 09:58:54 -0800 Subject: [PATCH] remove links to marketplace extension --- .../portability-screenshot.png | Bin 38782 -> 0 bytes .../portability-solution-explorer.png | Bin 16294 -> 0 bytes .../analyzers/portability-analyzer.md | 62 +++++++----------- includes/deprecating-api-port.md | 2 +- 4 files changed, 25 insertions(+), 39 deletions(-) delete mode 100644 docs/standard/analyzers/media/portability-analyzer/portability-screenshot.png delete mode 100644 docs/standard/analyzers/media/portability-analyzer/portability-solution-explorer.png diff --git a/docs/standard/analyzers/media/portability-analyzer/portability-screenshot.png b/docs/standard/analyzers/media/portability-analyzer/portability-screenshot.png deleted file mode 100644 index 2ded7a27fae2603a0b5a585f316b77eb3f764364..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38782 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 kp;P!79gLEGW{2&>{5Rt8`H5y@p<- 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 exceptions and other compatibility issues. ## Common targets -- [.NET Core](../../core/introduction.md): Has a modular design, supports side-by-side installation, and targets cross-platform scenarios. Side-by-side installation allows you to adopt new .NET Core versions without breaking other apps. If your goal is to port your app to .NET Core and support multiple platforms, this is the recommended target. -- [.NET Standard](../net-standard.md): Includes the .NET Standard APIs available on all .NET implementations. If your goal is to make your library run on all .NET supported platforms, this is recommended target. -- [ASP.NET Core](/aspnet/core): A modern web-framework built on .NET Core. If your goal is to port your web app to .NET Core to support multiple platforms, this is the recommended target. -- .NET Core + [Platform Extensions](../../core/porting/windows-compat-pack.md): Includes the .NET Core APIs in addition to the Windows Compatibility Pack, which provides many of the .NET Framework available technologies. This is a recommended target for porting your app from .NET Framework to .NET Core on Windows. -- .NET Standard + [Platform Extensions](../../core/porting/windows-compat-pack.md): Includes the .NET Standard APIs in addition to the Windows Compatibility Pack, which provides many of the .NET Framework available technologies. This is a recommended target for porting your library from .NET Framework to .NET Core on Windows. +- [.NET](../../core/introduction.md): Has a modular design, supports side-by-side installation, and targets cross-platform scenarios. Side-by-side installation allows you to adopt new .NET versions without breaking other apps. If your goal is to port your app to .NET and support multiple platforms, this is the recommended target. +- [.NET Standard](../net-standard.md): Includes the .NET Standard APIs available on all .NET implementations. +- [ASP.NET Core](/aspnet/core): A modern web-framework built on .NET. If your goal is to port your web app to .NET (Core) to support multiple platforms, this is the recommended target. +- .NET + [Platform Extensions](../../core/porting/windows-compat-pack.md): Includes the .NET APIs in addition to the Windows Compatibility Pack, which provides many of the Windows-specific .NET Framework technologies. +- .NET Standard + [Platform Extensions](../../core/porting/windows-compat-pack.md): Includes the .NET Standard APIs in addition to the Windows Compatibility Pack, which provides many of the Windows-specific .NET Framework technologies. ## How to use the .NET Portability Analyzer -To begin using the .NET Portability Analyzer in Visual Studio, you first need to download and install the extension from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=ConnieYau.NETPortabilityAnalyzer). It works on Visual Studio 2017 and Visual Studio 2019 versions. +To begin using the .NET Portability Analyzer in Visual Studio, you first need to [clone and build the dotnet-apiport project](https://github.com/microsoft/dotnet-apiport/blob/dev/docs/Console/README.md#run-the-tool-in-an-offline-mode). It works on Visual Studio 2017 and Visual Studio 2019 versions. > [!IMPORTANT] > The .NET Portability Analyzer is not supported in Visual Studio 2022. -Configure it in Visual Studio via **Analyze** > **Portability Analyzer Settings** and select your Target Platforms, which are the .NET platforms/versions that you want to evaluate the portability gaps comparing with the platform/version that your current assembly is built with. +### Solution-wide view -![Screenshot of portability analyzer.](./media/portability-analyzer/portability-screenshot.png) +A useful step in analyzing a solution with many projects is to visualize the dependencies to understand which subset of assemblies depend on what. The general recommendation is to apply the results of the analysis in a bottom-up approach starting with the leaf nodes in a dependency graph. -You can also use the ApiPort console application, download it from [ApiPort repository](https://aka.ms/apiportdownload). You can use `listTargets` command option to display the available target list, then pick target platforms by specifying `-t` or `--target` command option. - -### Solution wide view - -A useful step in analyzing a solution with many projects would be to visualize the dependencies to understand which subset of assemblies depend on what. The general recommendation is to apply the results of the analysis in a bottom-up approach starting with the leaf nodes in a dependency graph. - -To retrieve this, you may run the following command: +To retrieve this, run the following command: ```console ApiPort.exe analyze -r DGML -f [directory or file] @@ -50,19 +43,13 @@ A result of this would look like the following when opened in Visual Studio: ### Analyze portability -To analyze your entire project in Visual Studio, right-click on your project in **Solution Explorer** and select **Analyze Assembly Portability**. Otherwise, go to the **Analyze** menu and select **Analyze Assembly Portability**. From there, select your project's executable or DLL. - -![Screenshot of Portability Analyzer from Solution Explorer.](./media/portability-analyzer/portability-solution-explorer.png) - -You can also use the [ApiPort console app](https://aka.ms/apiportdownload). - -Type the following command to analyze the current directory: +Enter the following command to analyze the current directory: ```console ApiPort.exe analyze -f . ``` -To analyze a specific list of .dll files, type the following command: +To analyze a specific list of *.dll* files, enter the following command: ```console ApiPort.exe analyze -f first.dll -f second.dll -f third.dll @@ -76,12 +63,11 @@ ApiPort.exe analyze -t ".NET, Version=5.0" -f . Run `ApiPort.exe -?` to get more help. -It is recommended that you include all the related exe and dll files that you own and want to port, and exclude the files that your app depends on, but you don't own and can't port. This will give you most relevant portability report. +It's recommended that you *include* all the related *.exe* and *.dll* files that you own and want to port, and *exclude* the files that your app depends on but you don't own and can't port. This will give you most relevant portability report. ### View and interpret portability result -Only APIs that are unsupported by a Target Platform appear in the report. -After running the analysis in Visual Studio, you'll see your .NET Portability report file link pops up. If you used the [ApiPort console app](https://aka.ms/apiportdownload), your .NET Portability report is saved as a file in the format you specified. The default is in an Excel file (*.xlsx*) in your current directory. +Only APIs that are unsupported by a Target Platform appear in the report. Your .NET Portability report is saved as a file in the format you specified. The default is in an Excel file (*.xlsx*) in your current directory. #### Portability Summary @@ -95,18 +81,18 @@ The Portability Summary section of the report shows the portability percentage f The **Details** section of the report lists the APIs missing from any of the selected **Targeted Platforms**. -- Target type: the type has missing API from a Target Platform -- Target member: the method is missing from a Target Platform -- Assembly name: the .NET Framework assembly that the missing - API lives in. -- Each of the selected Target Platforms is one column, such as ".NET Core": "Not supported" value means the API is not - supported on this Target Platform. -- Recommended Changes: the recommended API or technology to change to. Currently, this field is empty or out of date for many APIs. Due to the large number of APIs, we have a significant challenge to keep it up to date. We're looking at alternative solutions to provide helpful information to customers. +- Target type: the type has missing API from a Target Platform. +- Target member: the method is missing from a Target Platform. +- Assembly name: the .NET Framework assembly that the missing API lives in. +- Each of the selected Target Platforms is one column, such as ".NET Core": "Not supported" value means the API is not supported on this Target Platform. +- Recommended Changes: the recommended API or technology to change to. Currently, this field is empty or out of date for many APIs. Due to the large number of APIs, it's a significant challenge to keep it up to date. -#### Missing Assemblies +#### Missing assemblies ![Screenshot of missing assemblies.](./media/portability-analyzer/api-catalog-missing-assemblies.png) -You may find a Missing Assemblies section in your report. This section contains a list of assemblies that are referenced by your analyzed assemblies and were not analyzed. If it's an assembly that you own, include it in the API portability analyzer run so that you can get a detailed, API-level portability report for it. If it's a third-party library, check if there is a newer version that supports your target platform, and consider moving to the newer version. Eventually, the list should include all the third-party assemblies that your app depends on that have a version supporting your target platform. +You might find a Missing Assemblies section in your report. This section contains a list of assemblies that are referenced by your analyzed assemblies and were not analyzed. If it's an assembly that you own, include it in the API portability analyzer run so that you can get a detailed, API-level portability report for it. If it's a third-party library, check if there is a newer version that supports your target platform, and consider moving to the newer version. Eventually, the list should include all the third-party assemblies that your app depends on that have a version supporting your target platform. + +## See also For more information on the .NET Portability Analyzer, visit the [GitHub documentation](https://github.com/Microsoft/dotnet-apiport#documentation). diff --git a/includes/deprecating-api-port.md b/includes/deprecating-api-port.md index 54032811ce1a5..d6b0fe6f04b58 100644 --- a/includes/deprecating-api-port.md +++ b/includes/deprecating-api-port.md @@ -1,2 +1,2 @@ -> [!NOTE] +> [!IMPORTANT] > API Port has been deprecated in favor of binary analysis with the [.NET Upgrade Assistant](../docs/core/porting/upgrade-assistant-overview.md) tool. The backend service of API Port has been shut down, so to use the tool, you must use it offline. For more information, see [.NET API Port README](https://github.com/microsoft/dotnet-apiport/blob/dev/docs/Console/README.md#run-the-tool-in-an-offline-mode).