-
Notifications
You must be signed in to change notification settings - Fork 6.1k
Document IL2125 and IL3058 transitive reference compatibility warnings #50266
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
Copilot
wants to merge
6
commits into
main
Choose a base branch
from
copilot/document-new-feature
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+157
−0
Draft
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
3ec08d1
Initial plan
Copilot 07c49f1
Add documentation for IL2125 and IL3058 transitive reference warnings
Copilot 5a84e99
Address PR feedback: Update terminology and remove suppression guidance
Copilot d7b36c9
Update frontmatter titles to match heading terminology
Copilot af0c6e5
Fix hyphenation for consistency in terminology
Copilot b7f9860
Ensure consistent terminology throughout all documentation
Copilot File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| --- | ||
| title: "IL3058: Referenced assembly is not annotated for AOT compatibility" | ||
| description: "Learn about warning IL3058: Referenced assembly is not annotated for AOT compatibility" | ||
| ms.date: 12/02/2024 | ||
| f1_keywords: | ||
| - "IL3058" | ||
| --- | ||
| # IL3058: Referenced assembly is not annotated for AOT compatibility | ||
|
|
||
| ## Cause | ||
|
|
||
| A project has `<VerifyReferenceAotCompatibility>true</VerifyReferenceAotCompatibility>` set, and one or more referenced assemblies don't have the `IsAotCompatible` assembly metadata attribute set to `true`. | ||
|
|
||
| ## Rule description | ||
|
|
||
| When you enable AOT analysis with `<EnableAotAnalyzer>true</EnableAotAnalyzer>` or mark your project as AOT-compatible with `<IsAotCompatible>true</IsAotCompatible>`, you can optionally enable verification that all referenced assemblies are also annotated for AOT compatibility. This helps ensure that all dependencies in your project are annotated for AOT compatibility. | ||
|
|
||
| To enable this verification, set the `VerifyReferenceAotCompatibility` property to `true` in your project file: | ||
|
|
||
| ```xml | ||
| <PropertyGroup> | ||
| <EnableAotAnalyzer>true</EnableAotAnalyzer> | ||
| <VerifyReferenceAotCompatibility>true</VerifyReferenceAotCompatibility> | ||
| </PropertyGroup> | ||
| ``` | ||
|
|
||
| When this property is enabled, the analyzer checks that all referenced assemblies have been built with `<IsAotCompatible>true</IsAotCompatible>`, which adds the assembly-level attribute `[assembly: AssemblyMetadata("IsAotCompatible", "True")]` to the assembly. | ||
|
|
||
| ## Example | ||
|
|
||
| ```csharp | ||
| // Assembly reference: MyLibrary.dll (built without <IsAotCompatible>true</IsAotCompatible>) | ||
|
|
||
| public class Program | ||
| { | ||
| public static void Main() | ||
| { | ||
| // IL3058: Referenced assembly 'MyLibrary' is not built with `<IsAotCompatible>true</IsAotCompatible>` | ||
| // and may not be compatible with AOT. | ||
| var obj = new MyLibrary.SomeClass(); | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| ## How to fix violations | ||
|
|
||
| You have several options to fix this warning: | ||
|
|
||
| 1. **Update the referenced library** to be built with `<IsAotCompatible>true</IsAotCompatible>`. This is the preferred approach if you control the library source code. The `IsAotCompatible` property marks the assembly as compatible with Native AOT and enables AOT-specific analysis. | ||
|
|
||
| 2. **Disable the verification** by setting `<VerifyReferenceAotCompatibility>false</VerifyReferenceAotCompatibility>` in your project file if you're confident that the library works correctly with Native AOT even without the attribute. | ||
|
|
||
| ## See also | ||
|
|
||
| - [Native AOT deployment](../index.md) | ||
| - [Introduction to AOT warnings](../fixing-warnings.md) | ||
| - [Prepare .NET libraries for trimming](../../trimming/prepare-libraries-for-trimming.md) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| --- | ||
| title: "IL2125: Referenced assembly is not annotated for trim compatibility" | ||
| description: "Learn about trim warning IL2125: Referenced assembly is not annotated for trim compatibility" | ||
| ms.date: 12/02/2024 | ||
| f1_keywords: | ||
| - "IL2125" | ||
| --- | ||
| # IL2125: Referenced assembly is not annotated for trim compatibility | ||
|
|
||
| ## Cause | ||
|
|
||
| A project has `<VerifyReferenceTrimCompatibility>true</VerifyReferenceTrimCompatibility>` set, and one or more referenced assemblies don't have the `IsTrimmable` assembly metadata attribute set to `true`. | ||
|
|
||
| ## Rule description | ||
|
|
||
| When you enable trim analysis with `<EnableTrimAnalyzer>true</EnableTrimAnalyzer>` or mark your project as trimmable with `<IsTrimmable>true</IsTrimmable>`, you can optionally enable verification that all referenced assemblies are also annotated for trim compatibility. This helps ensure that all dependencies in your project are annotated for trim compatibility. | ||
|
|
||
| To enable this verification, set the `VerifyReferenceTrimCompatibility` property to `true` in your project file: | ||
|
|
||
| ```xml | ||
| <PropertyGroup> | ||
| <EnableTrimAnalyzer>true</EnableTrimAnalyzer> | ||
| <VerifyReferenceTrimCompatibility>true</VerifyReferenceTrimCompatibility> | ||
| </PropertyGroup> | ||
| ``` | ||
|
|
||
| When this property is enabled, the analyzer checks that all referenced assemblies have been built with `<IsTrimmable>true</IsTrimmable>`, which adds the assembly-level attribute `[assembly: AssemblyMetadata("IsTrimmable", "True")]` to the assembly. | ||
|
|
||
| ## Example | ||
|
|
||
| ```csharp | ||
| // Assembly reference: MyLibrary.dll (built without <IsTrimmable>true</IsTrimmable>) | ||
|
|
||
| public class Program | ||
| { | ||
| public static void Main() | ||
| { | ||
| // IL2125: Referenced assembly 'MyLibrary' is not built with `<IsTrimmable>true</IsTrimmable>` | ||
| // and may not be compatible with trimming. | ||
| var obj = new MyLibrary.SomeClass(); | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| ## How to fix violations | ||
|
|
||
| You have several options to fix this warning: | ||
|
|
||
| 1. **Update the referenced library** to be built with `<IsTrimmable>true</IsTrimmable>`. This is the preferred approach if you control the library source code. See [Prepare .NET libraries for trimming](../prepare-libraries-for-trimming.md) for guidance on making libraries trim-compatible. | ||
|
|
||
| 2. **Disable the verification** by setting `<VerifyReferenceTrimCompatibility>false</VerifyReferenceTrimCompatibility>` in your project file if you're confident that the library works correctly with trimming even without the attribute. | ||
|
|
||
| ## See also | ||
|
|
||
| - [Prepare .NET libraries for trimming](../prepare-libraries-for-trimming.md) | ||
| - [Introduction to trim warnings](../fixing-warnings.md) | ||
| - [Trim self-contained deployments and executables](../trim-self-contained.md) |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.