小编DrG*_*iff的帖子

编译错误CS0016:无法写入输出文件

简单来说

当我尝试浏览我的网站时,收到以下错误消息:

CS0016:无法写入输出文件'c:\ Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\www\xxx\yyy\zzz\abdll' - '目录名无效'

详细地

我的开发PC上有两个网站(虚构名称):

  • Web2 - 这是使用.NET 3.5在ASP.NET中编写的,并在AppPool中运行,该AppPool用于解决v2.0 .NET框架并以集成模式运行.这是使用Visual Studio 2010开发的
  • Web4 - 这是使用.NET 4.5在ASP.NET中编写的,并在AppPool中运行,该AppPool用于解决v4.0 .NET框架并以集成模式运行.这是使用Visual Studio 2012开发的.

最近,我几乎经常在Web4上使用VS2012,它工作正常,但是前几天我试图运行Web2并得到上面显示的异常.

奇怪的是,路径的一部分(我上面用字母"zzz"替换)似乎指向德语路径,因为它是"\ de-DE" - 我不是用德语操作,所以我不知道从哪里得到这个想法.

有一件事几乎肯定是无关紧要的,但由于某些未知的原因,我觉得重要的是提到:我在Visual Studio 2012中使用性能分析工具在此问题首次出现的前一天,我不知道这是否可能有对我的电脑做了一些改动......?

尝试修复

互联网上有很多相关的话题; 一些线程成功结束,其中文件访问权限已被更改,而其他线程完成了一些有点绝望的声音...我已经完成了将我的PC上所有相关声音目录的NTFS权限与其同事的NTFS权限进行比较的过程.机器这仍然有效.不幸的是,在那里没有快乐.

我还卸载了asp.net 2.0并使用以下命令重新安装:

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe -u
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe -ir
Run Code Online (Sandbox Code Playgroud)

再一次,在那里也没有快乐.

我的Web4继续不受影响.

另外,仅供参考:在Win7 x64上使用IIS 7.5.

我现在转向更广泛的观众,希望将我目前的绝望状态转变为成功之一.

感谢大家

格里夫

asp.net iis asp.net-mvc visual-studio asp.net-mvc-4

17
推荐指数
3
解决办法
3万
查看次数

异步MVVM命令

我一直在关注Stephen Cleary在MSDN杂志(异步MVVM应用程序模式)中的一系列相当优秀的文章,并一直IAsyncCommand在"hello world"风格的应用程序中使用他的模式.

但是,他没有解决的一个领域是当需要传入命令参数时(使用此模式).对于一个简单的示例,请考虑身份验证,其中出于安全原因,密码控件可能不受数据限制.

我想知道是否有人设法让他的AsyncCommand参与工作,如果是这样,他们会分享他们的发现吗?

wpf asynchronous mvvm task-parallel-library async-await

17
推荐指数
1
解决办法
8601
查看次数

Azure DevOps 项目管道无法从不同项目中的工件源访问 NuGet 包

2020 年 2 月 20 日更新

概括

Azure DevOps 管道构建无法从我们在 Artifacts 下的私有源中找到 NuGet 包。

我们的 Azure DevOps 环境

在 Azure 中,我们有我们的公司“空间”:dev.azure.com/OurCompany

在此之下,我们有多个项目,例如,想象一下这三个:

  • 绿色:这包含某种类型的应用程序
  • 蓝色:这包含不同类型的应用程序
  • 红色:这包含我们的“通用”辅助代码

红色的

RED 保存了我们所有常见的帮助程序代码,这些代码都是 GREEN 和 BLUE 应用程序使用的 DLL。这些以 NuGet 包的形式提供。

在 RED 的 Artifacts 下,我们看到了一个名为“OurCompany”的“组织范围提要”。我们知道我们不能使用它,因为这些 NuGet 包需要对 OurCompany 中的每个人可用,这意味着不仅在 Azure 上,而且在我们公司网络(我们运行 Visual Studio 的地方)中的桌面计算机上。我认为“组织范围内的提要”不会暴露给我们的企业网络。

因此,我们在 RED 的 Artifacts 下创建了一个新的 Feed。当我查看权限时,我看到以下条目:

  • {我}:(所有者)
  • [OurCompany]\Project Collection Adminstrators : (所有者)
  • [RED]\项目管理员:(所有者)
  • RED 构建服务(我们的公司):(贡献者)
  • 项目集合构建服务(OurCompany):(贡献者)
  • [RED]\贡献者(贡献者)

公司的

因此,回到 Corporate,我们将 NuGet 包源添加到我们的 Visual Studio,然后它可以从 Azure 中提取 NuGet 包。

绿色和蓝色

在这里,我们有我们的产品。我们创建了一个构建管道,并添加了一个 NuGet …

nuget-package-restore devops azure-devops azure-pipelines azure-artifacts

14
推荐指数
2
解决办法
5853
查看次数

单元测试 - 存根SqlDataReader

我们有一个n层Web应用程序,可以从SQL Server中提取数据.我们的数据访问逻辑返回一个SqlDataReader,其数据随后用于创建我们的Business对象(也称为数据传输对象).

我们希望构建单元测试以检查我们的代码,这些代码解释这些SqlDataReader对象返回的数据以构建我们的Business对象.

因此,在单元测试期间,似乎需要构建存根来替换SqlDataReader对象.可能相当典型,我们的SqlDataReader对象通常返回多个记录集,每个记录集都有多行.

  1. 这是一项明智的努力吗?
  2. 我们该如何构建这些存根对象?

提前谢谢了

格里夫

nunit unit-testing sqldatareader stub stub-data-generation

13
推荐指数
1
解决办法
3848
查看次数

ASP.NET MVC - ValidateAntiForgeryToken到期

在网页中,我们提供了用户可以点击进行身份验证的超链接(GET):

@Html.ActionLink("Please Login", "MyMethod", "MyController")
Run Code Online (Sandbox Code Playgroud)

这将映射到以下返回视图的控制器方法:

    [RequireHttps]
    public ActionResult MyMethod()
    {
        return this.View(new MyModel());
    }
Run Code Online (Sandbox Code Playgroud)

此视图包含用户提供凭据的表单; 表单包含所需的AntiForgeryToken.

当用户提交表单时,将调用以下Controller方法:

    [HttpPost]
    [RequireHttps]
    [ValidateAntiForgeryToken]
    public ActionResult MyMethod(MyModel model)
    {
        // my logic
    }
Run Code Online (Sandbox Code Playgroud)

这很好用,大部分时间......

但是,如果用户将浏览器打开一段"重要"时间,然后快速连续执行以下步骤:

  1. 单击超链接(GET)以加载登录表单
  2. 填写表格并提交

他们得到一个例外,通知他们防伪令牌未提供或无效.

我不明白为什么会这样:View(包含表单)是在浏览器处于休眠状态之后创建的,因此防伪标记应该都是"新鲜的".但是,这个设计显然有问题,但我不确定如何最好地纠正它.

如果您有任何建议,请提前致谢.

格里夫

security asp.net-mvc csrf antiforgerytoken asp.net-mvc-3

13
推荐指数
1
解决办法
9813
查看次数

Blazor 服务器 - “代码隐藏”模式:OnInitializedAsync():找不到合适的方法来覆盖

我有一个 Blazor(服务器)应用程序,它运行得非常好,并且遵守Microsoft.CodeAnalysis.FxCopAnalyzers和设置的所有规则StyleCop.Analyzers

一个大幅削减的剃刀页面如下:

@inherits OwningComponentBase<MyService>
@inject IModalService ModalService
@inject IJSRuntime JSRuntime

// UI code

@code
{
    private readonly CancellationTokenSource TokenSource = new CancellationTokenSource();
    ElementReference myElementReferenceName;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        await this.myElementReferenceName.FocusAsync(this.JSRuntime);
    }

    protected override async Task OnInitializedAsync()
    {
        ....
    }

    public void Dispose()
    {
        this.TokenSource.Cancel();
    }

    protected void ShowModalEdit(object someObject)
    {
        .....
        Modal.Show<MyPage>("Edit", parameters);
    }
}
Run Code Online (Sandbox Code Playgroud)

注意#1:我@inherits OwningComponentBase<MyService>根据Daniel Roth 的建议使用

注意#2:我正在使用Chris Sainty 的 Modal 组件组件

但是,当我尝试将所有代码从该@code {...} …

code-behind blazor blazor-server-side

11
推荐指数
3
解决办法
6976
查看次数

运行异步代码的Windows服务不等待工作完成

简单来说

我有一个Windows服务,并行执行多个作业作为异步任务.然而,当调用OnStop时,似乎这些都立即被终止而不是被允许以更加亲切的方式停止.

更详细

每个工作代表一次工作的迭代,因此完成工作后,工作需要再次运行.

为实现这一目标,我正在编写一个概念验证Windows服务:

  • 将每个作业作为等待的异步TPL任务运行(这些都是I/O绑定任务)
  • 每个作业在循环内迭代运行
  • 每个作业的循环并行运行

当我运行服务时,我看到所有内容都按预期执行.但是,当我停止服务时,似乎一切都停止了.

好的 - 那这是怎么回事?

在服务中,我有一个取消令牌和一个TaskCompletion Source:

private static CancellationTokenSource _cancelSource = new CancellationTokenSource();
private TaskCompletionSource<bool> _jobCompletion = new TaskCompletionSource<bool>();
private Task<bool> AllJobsCompleted { get { return _finalItems.Task; } }
Run Code Online (Sandbox Code Playgroud)

这个想法是,当每个Job优雅地停止时,Task AllJobsCompleted将被标记为已完成.

OnStart只是开始运行这些作业:

protected override async void OnStart(string[] args)
{
    _cancelSource = new CancellationTokenSource();  
    var jobsToRun = GetJobsToRun(); // details of jobs not relevant 
    Task.Run(() => this.RunJobs(jobsToRun, _cancelSource.Token).ConfigureAwait(false), _cancelSource.Token);
}
Run Code Online (Sandbox Code Playgroud)

Task RunJobs将以并行循环运行每个作业:

private async Task RunModules(IEnumerable<Jobs> jobs, CancellationToken cancellationToken)
{
    var parallelOptions = …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing windows-services task-parallel-library async-await

8
推荐指数
1
解决办法
7885
查看次数

Blazor:绑定到 MultiSelectList(最好带有复选框)

尝试使用 Blazor(服务器,如果这有什么不同的话),我很难绑定到 MultiSelectList 以工作......

一点背景:我正在处理 EF Core 并且有一个多对多的关系,比如说人和汽车之间的关系。我目前正在加载一个显示现有详细信息的页面,并允许用户更新此页面。

所以在我的服务中,我从数据库加载了我的 Person 实体,这包括他们当前拥有的所有汽车的详细信息。我还加载了所有可用汽车的列表。然后,我的 Service 方法创建一个 MultiSelectList 并将其添加到我的 ViewModel(将返回到 Razor 页面):

服务方式

vm.CarSelector = new MultiSelectList(
     allCars,
     nameof(Car.CarId), 
     nameof(Car.Name), 
     person.OwnedCars.Select(oc => oc.CarId));
Run Code Online (Sandbox Code Playgroud)

这是虚构的代码,但我希望你能得到图片。在调试这个时(在 Service 方法中),我可以看到这个 MultiSelectList 为每辆车都有一个条目,已经选择的条目显示为 Selected。伟大的!

Blazor 剃刀页

所以,这就是我解脱的地方......我不知道如何将 Razor 控件的双向数据绑定到这个对象。

  • 我正在尝试使用 <InputSelect />,但这可能不是最好的控件。
  • 理想情况下(实际上,这更像是“必须拥有”),每个选项都应该有 CheckBox。
  • 我想知道使用 MultiSelectList 是否真的能给我带来任何好处

data-binding multi-select blazor blazor-server-side

8
推荐指数
2
解决办法
9519
查看次数

Blazor 服务器 - 如何配置本地 ADFS 安全性?

我有一个解决 .NET Core 3.1 预览版 2 的现有 Blazor(服务器)应用程序。

我需要追溯添加本地 ADFS(不是 Azure)安全性。我一直在尝试在 ASP.NET Core 中使用 WS-Federation关注 Microsoft 的Authenticate users,但它顽固地忽略了安全性。这篇文章当然是为 ASP.NET 而写的,而不是 Blazor...

到目前为止我所做的是:

public static void ConfigureServices(IServiceCollection services)
{
    services.AddIdentity<IdentityUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddAuthentication()
        .AddWsFederation(options =>
        {
            options.MetadataAddress = "https://adfs.Server.com/FederationMetadata/2007-06/FederationMetadata.xml";
            options.Wtrealm = "https://localhost:44323/";
        });

    services.AddAuthorization();

    services.AddRazorPages();
    services.AddServerSideBlazor();

    ....
Run Code Online (Sandbox Code Playgroud)

值得关注的一件事- 数据库中的表当前支持早期的身份验证模式(成员资格?)(由我们正在重写的应用程序使用)。它有表 [AspNetRoles] [AspNetUserClaims] [AspNetUserLogins] [AspNetUserRoles] 和 [AspNetUsers]。这些会被覆盖吗?

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }    

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if …
Run Code Online (Sandbox Code Playgroud)

authentication authorization adfs asp.net-core blazor-server-side

8
推荐指数
1
解决办法
1447
查看次数

Git for Windows - 凭证管理器问题

Git-2.34.0-64-bit.exeWindows 版 Git安装了 Git ,并选择了大部分默认选项。安装表示它将使用“git-credential-manager-core”,这似乎是它的最新版本。

完成安装并重新启动后,当我导航到包含 GIT 存储库的目录并git status从 cmd 行键入时,它工作正常。

但当我输入时,git fetch它说:

git:credential-manager不是 git 命令。最相似的命令是credential-manager-core

那么,为什么它不使用凭证管理器的核心版本,或者更确切地说,我需要做什么才能让它使用它?

谢谢

git git-for-windows git-credential-manager

8
推荐指数
1
解决办法
5365
查看次数