- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗯,很明显我的问题标题太复杂了。我只是试图让它尽可能具体。所以,我会尝试更好地解释这个问题。
假设我们在一个解决方案中有三个 .NET 项目。主项目是一个简单的控制台应用程序 ApplicationAssembly。此项目引用了另一个托管程序集库 DirectlyReferencedLibrary。同时DirectlyReferencedLibrary指的是IndirectlyUsedLibrary。
因此,项目用法如下所示:ApplicationAssembly --> DirectlyReferencedLibrary --> IndirectlyUsedLibrary。
请注意,ApplicationAssembly 不直接使用任何声明为 IndirectlyUsedLibrary 的类型。我们还假设这些程序集中声明的所有类型都位于同一个命名空间中。
此解决方案可以编译并正常工作。
当我同时具备以下条件时就会出现问题:
这是此类的示例。
using System;
namespace Test
{
public static class UnUsedType
{
// It's a generic extension method with a type restriction.
public static void Magic<T>(this T @this)
// It's a type restriction that uses a type from the IndirectlyUsedLibrary.
where T : ProblemType
{
Console.WriteLine("I do nothing actually.");
}
}
}
当我尝试编译这个项目时,出现以下错误:
Error The type 'Test.ProblemType' is defined in an assembly that is not referenced. You must add a reference to assembly 'IndirectlyUsedLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. C:\Projects\Test\ApplicationAssembly\Program.cs 22 13 ApplicationAssembly
谁能帮我理解为什么会这样?
我做了一个小的调查解决方案。 如果你好心帮助我,你将能够接受 an archived solution here
抱歉我的英语不好。
另一个奇怪的事情是 LINQ 方法的不同调用可能会或可能不会产生编译时错误:
// Ok. Let's do some work using LINQ we love so much!
var strings = new[] { "aaa", "bbb", "ccc" };
Func<string, object> converter = item => (object) item;
// The following line makes problems.
var asObjects1 = strings.Select(converter);
// Everything is OK if we use the following line:
var asObjects2 = Enumerable.Select(strings, converter);
最佳答案
Can anyone help me to understand why is it so?
C# 编译器有合理的期望,即引用程序集的传递闭包 在编译时可用。它没有任何高级逻辑来推断它肯定需要、可能需要、可能不需要或绝对不需要知道什么来解决你的程序将要抛给它的类型分析中的所有问题.如果您直接或间接引用程序集,编译器会假定其中可能有它需要的类型信息。
另外,如果您在编译时没有引用的程序集集,那么用户在运行时会有什么期望?期望编译时环境至少具有运行时所需的程序集集似乎是合理的。
I don't want to do it.
在生活中,我们都不得不做不想做的事情。
关于c# - 间接引用声明具有类型限制的泛型扩展方法的程序集时出现奇怪的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8597486/
我是一名优秀的程序员,十分优秀!