更新到新包Microsoft.EntityFrameworkCore.SqlServer 1.1.2后,我尝试创建DBContext时出错:
System.IO.FileLoadException发生HResult = 0x80131040
Message =无法加载文件或程序集'Microsoft.Extensions.DependencyInjection.Abstractions,Version = 1.1.0.0,Culture = neutral,PublicKeyToken = adb9793829ddae60'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(来自HRESULT的异常:0x80131040)Source = Microsoft.EntityFrameworkCore StackTrace:位于C:\ src\backend \中Services.Infrastructure.Data.SqlServerDbContext..ctor(DatabaseOptions databaseOptions)的Microsoft.EntityFrameworkCore.DbContext..ctor(DbContextOptions选项) Packages\Services.Infrastructure\Data\SqlServerDbContext.cs:位于C:\ src\backend\Modules\Translations\Translations.Api\Data\TranslationsDbContext.cs中Translations.Api.Data.TranslationsDbContext..ctor(DatabaseOptions databaseOptions)的第16行:第16行
我的基础DbContext
public class SqlServerDbContext : DbContext
{
private readonly DatabaseOptions _databaseOptions;
protected SqlServerDbContext(DatabaseOptions databaseOptions)
{
if (string.IsNullOrEmpty(databaseOptions.ConnectionString))
throw new Exception("Database connection string is missed.");
_databaseOptions = databaseOptions;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_databaseOptions.ConnectionString);
}
}
Run Code Online (Sandbox Code Playgroud)
我使用的数据库选项
public class DatabaseOptions
{
public string ConnectionString { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我创建上下文实例的地方
var dbOptions = new DatabaseOptions { ConnectionString …Run Code Online (Sandbox Code Playgroud) 我下载了最新版本的Service Fabric SDK 2.4.164并尝试创建一个新的简单无状态服务.构建成功但是当我运行它来调试我得到:
未知模块中出现未处理的"System.BadImageFormatException"类型异常.
附加信息:无法加载文件或程序集'System.Fabric,Version = 5.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.尝试加载格式不正确的程序.
问题是什么?请帮忙解决这个问题.如果我必须添加更多信息,请告诉我
我使用Swashbuckle来记录WebAPI控制器.我还使用OAuth2和Client Credentials Flow.所以授权我需要传递 client_id和client_secret.
我有以下代码:
config.EnableSwagger(c => {
c.SingleApiVersion("v1", "My API");
c.OAuth2("oauth2")
.Flow("application")
.TokenUrl("/oauth2/token");
c.OperationFilter<AssignOAuthSecurityRequirements>();
})
.EnableSwaggerUi(c => {
c.EnableOAuth2Support(clientId: "clientIdValue", clientSecret:"clientSecretValue", "", "");
c.CustomAsset("index", Assembly.GetExecutingAssembly(), "WebAPI.Swagger.UI.index.html");
});
Run Code Online (Sandbox Code Playgroud)
授权工作正常但我client_id和client_secret值是硬编码的(clientIdValue,clientSecretValue).如何在此对话框中添加用户输入值的可能性?谁能帮我?
如果我还需要发布代码,请告诉我AssignOAuthSecurityRequirements.在此先感谢所有人
在Startup.cs文件中我有
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
Run Code Online (Sandbox Code Playgroud)
有配置的appsettings.json文件.喜欢 :
{
"Log" : {
"Type" : "value from appsettings.json"
}
}
Run Code Online (Sandbox Code Playgroud)
reloadOnChange设置为true,所以,当我更改appsettings.json然后我立即在我的程序中得到一个新的日志类型值.
但是我使用Docker和docker-compose并通过env变量传递设置值.我的docker-compose.override.yml文件是:
version: '3.7'
services:
myservice:
environment:
ASPNETCORE_ENVIRONMENT: Development
Log__Type: "value from docker-compose"
Run Code Online (Sandbox Code Playgroud)
要运行我使用`docker-compose up.现在我的应用程序的值为"docker-compose的值",用于日志类型.
问题:有没有办法Log__Type在运行时更改env variable()的值(不重新启动docker容器)并在我的应用程序中重新加载配置,就像使用reloadOnChange和appsettings.json一样?
我尝试连接到container(docker exec)并设置env变量的新值
printenv Log__Type // -> value from docker-compose
export Log__Type=new value
printenv …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个调试器nuget包.所以,我从"创建符号包"开始.使用创建包
nuget pack PackageARM.nuspec -Symbols
PackageARM.nuspec:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>PackageARM</id>
<version>1.0.15</version>
<authors>PackageARM</authors>
<owners>PackageARM</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Package Description</description>
<dependencies>
<group targetFramework=".NETStandard2.0" />
</dependencies>
</metadata>
<files>
<file src="bin\Release\netstandard2.0\*.pdb" target="lib\netstandard2.0" />
<file src="bin\Release\netstandard2.0\*.dll" target="lib\netstandard2.0" />
<file src="**\*.cs" target="src" />
</files>
</package>
Run Code Online (Sandbox Code Playgroud)
并将其推向nuget:https://www.nuget.org/packages/PackageARM/1.0.15
然后取消选中Enable Just My Code并检查Enable source server supportVS 2017.此外,我尝试添加符号服务器:https://www.nuget.org,https: //nuget.smbsrc.net/但没有结果.
当我尝试从包使用F11进入方法时,它只是步骤到下一行.我错过了什么?
我的pdb文件包含.cs文件的路径,即'C:\ project\ProjectARM\Class1.cs'可以吗?如果没有源路径,其他用户如何调试?
我有一个简单的模型,例如:
public class Employer
{
[Required(ErrorMessage = "Please specify id")]
public int Id { get; set; }
[MaxLength(256, ErrorMessage = "Max lenght should be less than 256")]
[Required(ErrorMessage = "Please specify Name")]
public string Name { get; set; }
[Required(ErrorMessage = "Please specify id of organization")]
public int OrganizationId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
那么控制器是:
public IHttpActionResult Post(Employer employer)
{
if(!IsActiveOrganization(employer.OrganizationId))
{
ModelState.AddModelError(nameof(employer.OrganizationId), "The organization is not active!");
}
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在尝试在创建新雇主之前验证模型。因此,当我传递无效模型时id,响应将如下:
{ …Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×2
.net-core ×1
asp.net-core ×1
asp.net-mvc ×1
azure ×1
debugging ×1
docker ×1
javascript ×1
modelstate ×1
nuget ×1
swagger ×1
swagger-ui ×1
swashbuckle ×1
validation ×1