Предупреждение компилятора CS4014 (вызов метода асинхронизации без ожидающего результата) не выдается в качестве предупреждения во время сборки, когда вызываемый метод находится в ссылочной сборке.Предупреждение компилятора CS4014, не испущенное во время сборки
Когда вызываемый метод находится в том же сборке, предупреждение правильно испускается.
Предупреждение о компиляторе : сигнализируется в Visual Studio, когда оба проекта содержатся в одном решении.
Разница, похоже, вызвана тем, что компилятор имеет только скомпилированную ссылочную сборку и Visual Studio с исходным кодом для обеих сборок.
Вопрос в следующем: почему эти два разных поведения? И есть ли способ получить предупреждение CS4014 во время компиляции?
Чтобы повторить эту конфигурацию поведения двух библиотек классов, оба имеют один код файла:
TestClassLibrary1
public class Class1
{
public static async Task<string> DoSomething()
{
return await Task.FromResult("test");
}
}
TestClassLibrary2 (ссылки TestClassLibrary1)
public class Class2
{
public void CallingDoSomething()
{
Class1.DoSomething();
}
}
Составление этих проектов будет завершена без предупреждений. Открытие их в одном и том же решении в Visual Studio приведет к тому, что в списке ошибок будет отображаться 1 ошибка, а красная squiggly линия под Class1.DoSomething()
.
Как вы собираете сборки? Можете ли вы показать заявления, которые используете? –
Я собираю сборки, используя Visual Studio -> Build Solution. Оба проекта скомпилированы со всеми предупреждениями ('/ warn: 4'). Если это поможет, я могу вставить аргументы в csc.exe, но они довольно длинные. –
Хорошо, я думал, что вы запустили сборку вручную. –