小编Mat*_*ein的帖子

Visual Studio重建未修改的项目

所以,正如标题所示,我现在有一个VS2010解决方案,里面有大约50个项目.如果我对没有引用的"顶级"项目进行更改,那么VS仍会重建所有50个项目.我正在运行Visual Studio 2010 Ultimate而没有任何附加组件.我正在使用ILMerge将所有项目合并到一个文件中.

我已经通过检查较低级别dll的时间戳来验证这一点,并且看到它们确实已经重建,即使它们的代码没有被触及.

我已阅读所有回复和评论:

Visual Studio 2008不断重建

Visual Studio不断构建一切

奇怪的VS2010构建故障发生在我的解决方案中

C#项目在Visual Studio中重建的原因

但是他们中的大多数只提供卸载项目的建议,以加快构建时间,但没有具体的解决方案.我试图弄清楚为什么VS认为这些依赖项目需要在不修复时进行重建.

我已经打开了'工具>选项>项目和解决方案>构建和运行>仅在运行时构建启动项目和依赖项'但没有任何效果.

此外,如果我只是重建一个只有8个(in)直接依赖项的"中级"项目,那么即使没有调用ILMerge并且没有修改任何依赖项目,它仍会构建所有8个项目.

感谢大家提供的任何见解.

添加

为了测试一些建议,我从头开始创建一个新的WinForms项目.然后我在该解决方案中创建了两个新项目.我将所有代码和资源(不是项目文件)从我的两个"最低级别"项目复制到两个全新的项目中(我通过将资源管理器中的文件和文件夹放到Visual Studio中的项目中来完成此操作).

最低的项目,我们称之为B,没有引用任何其他项目.下一个项目A仅引用了B. 因此,一旦我将所需的.NET和外部程序集引用添加到项目中,那么解决方案就会构建.

然后,我获得了我的新WinForm项目参考A并完成了完整版本.所以ref链是:

WinForm - > A - > B.

然后我修改了WinForm 并进行了标准构建(F6).和以前一样,Visual Studio重建了所有三个项目.

源文件在项目中的某些系统eleminiation后我发现,如果我打消了我Resources.Designer.csResources.resx(并评论指出,利用了的代码.Properties.Resources对这些资源的对象),然后修改的WinForm将不再重建整个解决方案,只会重建WinForm.

添加Resources.resxResources.Designer.cs返回项目B(但保留引用的代码,以便没有任何东西利用资源)将重新引入完整的构建行为.

要查看我的资源文件是否已损坏,我再次删除它们,然后创建一个新文件(通过Project Properties - > Resources)并重新添加与以前相同的资源,这是一个单独的Excel文件.使用此设置,仍将进行完全重建.

然后我删除了单个资源,但将资源文件保留在项目B中.即使没有添加资源,但资源文件仍在项目中,也会发生完全(不需要的)重建.

看起来只是将资源文件添加到(.NET 3.5)项目中将导致Visual Studio 2010始终重建该项目.这是一个错误或预期/预期的行为?

再次感谢所有人!

c# msbuild ilmerge visual-studio-2010 visual-studio

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

ConcurrentBag的正确用法是什么?

我已经在这里阅读过以前的问题,ConcurrentBag但没有找到多线程实现的实际示例.

ConcurrentBag是一个线程安全的包实现,针对同一个线程生成和使用存储在包中的数据的情况进行了优化.

目前这是我的代码中的当前用法(这是简化而非实际代码):

private void MyMethod()
{
    List<Product> products = GetAllProducts(); // Get list of products
    ConcurrentBag<Product> myBag = new ConcurrentBag<Product>();

    //products were simply added here in the ConcurrentBag to simplify the code
    //actual code process each product before adding in the bag
    Parallel.ForEach(
                products,
                new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount },
                product => myBag.Add(product));

    ProcessBag(myBag); // method to process each items in the concurrentbag
}
Run Code Online (Sandbox Code Playgroud)

我的问题:
这是正确的用法ConcurrentBag吗?ConcurrentBag在这种情况下可以使用吗?

对我来说,我认为一个简单List<Product>的手动锁会做得更好.这样做的原因是上面的场景已经打破了" 同一个线程将生成和消费存储在包中的数据 "规则.
另外我还发现 …

c# concurrency multithreading

50
推荐指数
2
解决办法
4万
查看次数

从中读取对象时是否需要锁定对象?

我正在编写一个程序,其中有一个由多个线程共享的对象:

  • A)多个写线程写入对象(所有运行相同的函数)
  • B)每5秒访问一次对象的读线程
  • C)访问对象的读取线程存在用户请求

显然有必要在写入时锁定对象,因为我们不希望多个线程同时写入对象.

我的问题是:

  1. 在读取对象时是否还需要锁定对象?
  2. 我是否认为如果我们只是在写作时锁定对象,那么关键部分就足够了; 但是如果我们在读取或写入时锁定对象,则需要互斥锁?

我问这个问题,因为在Microsoft Office中,Word的两个实例不可能以读/写访问模式访问文档; 但是当文档以读/写模式打开时,可以打开另一个Word实例以只读模式访问文档.线程中是否也适用相同的逻辑?

multithreading mutex critical-section

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

C#是action.BeginInvoke(action.EndInvoke,null)一个好主意?

如果我想对某些代码进行"一劳永逸",但仍希望确保清理我的内存(为什么异步委托方法需要调用EndInvoke?),以下是否会实现这一目标?

Action myAction = () => LongRunTime();
myAction.BeginInvoke(myAction.EndInvoke,null);
Run Code Online (Sandbox Code Playgroud)

我环顾四周,但没有看到任何地方使用过的模式.相反,人们使用annonomoyus方法作为他们的回调(例如结束BeginInvoke的正确方法?)或者他们定义一个实际的回调方法.由于我没有看到其他人这样做,这让我觉得它要么不起作用,要么是一个坏主意.

谢谢!

c# delegates asynchronous

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

进行 BigDecimal 比较的正确方法是什么

从最近开始,(我认为是因为我将代码转换为 kotlin,但不确定),Android Studio 在我编写时向我显示警告

if (myValue.compareTo(BigDecimal.ZERO) > 0)
Run Code Online (Sandbox Code Playgroud)

该消息显示“调用可替换为二元运算符”并将我的代码替换为

if (myValue > BigDecimal.ZERO)
Run Code Online (Sandbox Code Playgroud)

我注意到我也使用

if (myValue.compareTo(BigDecimal.ZERO) == 0
Run Code Online (Sandbox Code Playgroud)

但这一次我没有收到任何警告,如果我尝试更换它,它不起作用

if (myValue == BigDecimal.ZERO) // DOES NOT WORK
Run Code Online (Sandbox Code Playgroud)

为什么> ZERO有效但无效== ZERO?为什么我在 stackoverflow 上看到的每个线程(例如this)都推荐使用compareTobut > ZEROwork 并且是 Android Studio 推荐的?

android bigdecimal kotlin android-lint android-studio

9
推荐指数
1
解决办法
2940
查看次数

将 Jackson 与不可变的 AWS V2 DDB AttributeValue 和私有生成器一起使用?

我正在尝试使用 Jackson 序列化/反序列化DynamoDB V2 AttributeValue类。

它被设置为带有构建器的不可变类,并且构建器有一个私有构造函数。为了创建构建器,您需要调用AttributeValue.builder().

我无法控制这个类,所以我想使用 Jackson mixin。

我已经使用@JsonDeserialize(builder = AttributeValue.Builder::class)并注册了 mixin:

@JsonDeserialize(builder = AttributeValue.Builder::class)
interface AttributeValueMixin {
}

private val mapper = jacksonObjectMapper()
    .setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY)
    .addMixIn(AttributeValue::class.java, AttributeValueMixin::class.java)

Run Code Online (Sandbox Code Playgroud)

然而,Jackson 试图使用 的默认构造函数,AttributeValue.Builder但它不能,因为它没有。

com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造实例software.amazon.awssdk.services.dynamodb.model.AttributeValue$Builder(不存在创建者,如默认构造)

如何让 Jackson 使用AttributeValue.builder()工厂功能?或者关于如何使用 Jackson 序列化/反序列化此类的任何其他想法AttributeValue

java json jackson kotlin amazon-dynamodb

6
推荐指数
1
解决办法
1131
查看次数

在RSUBMIT块中调用本地SAS宏?

我有一个我在本地机器上用.sas文件创建的宏.我还有一个用于测试宏的本地数据集.此数据集具有与远程数据集相同的描述符,但只有较少的观察值.现在,我正在尝试针对远程数据集运行本地宏.这基本上就是我所拥有的:

这按预期工作:

%include "C:\my_sas_macro.sas";

%my_sas_macro(my_data=work.localdata)
Run Code Online (Sandbox Code Playgroud)

但是这会产生错误(错误如下):

%include "C:\my_sas_macro.sas";

rsubmit;
%my_sas_macro(my_data=remotelib.remotedata)
endrsubmit;
Run Code Online (Sandbox Code Playgroud)

有错误的日志:

125  %include "C:\my_sas_macro.sas";
136
137  rsubmit;
NOTE: Remote submit to REMOTEID.__7551 commencing.
WARNING: Apparent invocation of macro MY_SAS_MACRO not resolved.
83   %my_sas_macro(my_data=remotelib.remotedata)
     -
     180
ERROR 180-322: Statement is not valid or it is used out of proper order.
84   endrsubmit;

NOTE: Remote submit to REMOTEID.__7551 complete.
Run Code Online (Sandbox Code Playgroud)

我很确定我需要以某种方式将%macro /%mend块转移到服务器上,但我无法弄清楚如何.我已经看到了,%SYSLPUT但这是宏变量,而不是完整的宏.

无论如何,我可以在服务器上运行我的宏,而不必只是通过SSH代码和%include那里?

谢谢!

[编辑]已实施的解决方案

所以根据@ CarolinaJay65的回答,我提出了以下宏,这对我来说效果很好.

%macro include_on_server(file=);
%let server_file = ~/temp.sas;
%SYSLPUT macro_file=&file;
%SYSLPUT …
Run Code Online (Sandbox Code Playgroud)

sas

5
推荐指数
1
解决办法
8473
查看次数

解析错误:无法以跨环境方式使用资源“x”,必须显式设置资源的物理名称

我正在尝试将 ecs 集群从一个堆栈传递到另一个堆栈。

我收到此错误: Error: Resolution error: Resolution error: Resolution error: Cannot use resource 'BackendAPIStack/BackendAPICluster' in a cross-environment fashion, the resource's physical name must be explicit set or use `PhysicalName.GENERATE_IF_NEEDED`.

集群在 BackendAPIStack 中定义如下:

this.cluster = new ecs.Cluster(this, 'BackendAPICluster', {
   vpc: this.vpc
});
Run Code Online (Sandbox Code Playgroud)

堆栈定义如下:

 const backendAPIStack = new BackendAPIStack(app, `BackendAPIStack${settingsForThisEnv.stackVersion}`, {
    env: {
      account: process.env.CDK_DEFAULT_ACCOUNT,
      region: process.env.CDK_DEFAULT_REGION
    },
    digicallPolicyQueue: digicallPolicyQueue,
    environmentName,
    ...settingsForThisEnv
  });

  const metabaseStack = new MetabaseStack(app, 'MetabaseStack', backendAPIStack.vpc, backendAPIStack.cluster, {
    vpc: backendAPIStack.vpc,
    cluster: backendAPIStack.cluster
  });

  metabaseStack.addDependency(backendAPIStack);
Run Code Online (Sandbox Code Playgroud)

这是 MetabaseStack 的构造函数: …

aws-cloudformation aws-cdk

3
推荐指数
1
解决办法
2493
查看次数

#if - #else - #endif 破坏 F# 脚本

使用 Visual Studio 2015 Update 3 和fsi.exeF# v4.0,我尝试运行此脚本:

//error.fsx

#if INTERACTIVE
    let msg = "Interactive"
#else
    let msg = "Not Interactive"
#endif

let add x y =
    x + y

printfn "%d" (add 1 2)
Run Code Online (Sandbox Code Playgroud)

输出: error.fsx(12,15):错误 FS0039:未定义值或构造函数“add”

如果我然后注释掉#if- #else-#endif块,它工作正常:

// fixed.fsx

//#if INTERACTIVE
//    let msg = "Interactive"
//#else
//    let msg = "Not Interactive"
//#endif

let add x y =
    x + y

printfn "%d" (add 1 2)
Run Code Online (Sandbox Code Playgroud)

输出: 3

我确定我做错了什么(而不是这是一个错误),但我一生都无法弄清楚如何进行这项工作。 …

f# f#-interactive f#-scripting f#-4.0

2
推荐指数
1
解决办法
800
查看次数

Git-如何从单个项目的全局.gitignore中删除排除模式

可以说我的全局变量中有“ .foo”,.gitignore这对我当前的所有项目都很有效(并且可以说它们很多,因此我想将其保留在全局忽略文件中)。

现在,我开始一个新项目,该项目.foo在所有地方都使用文件。

如何.foo仅针对此特定项目“撤消” 在全局忽略中定义的文件的排除?

这意味着我可以git add .在使用新项目时让它拾取所有.foo文件,但是如果我git add .在任何其他项目中运行,则这些.foo文件将被忽略。

git gitignore

2
推荐指数
1
解决办法
111
查看次数

异步方法中的C#await清除SynchronizationContext(带有repro测试)

使用Visual Studio 2015 Update 3和面向.NET 4.6.1的C#测试项目,我得到以下行为:

[TestClass]
public class AwaitTests
{
    [TestMethod]
    public void AsyncRemovingSyncContext_PartialFail()
    {
        Log("1");
        SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
        Log("2");
        HasAwait().Wait(); // The continuation in this method is on wrong thread
        Log("5");
        Assert.IsNotNull(SynchronizationContext.Current);
    }

    [TestMethod]
    public async Task AsyncRemovingSyncContext_Fail()
    {
        Log("1");
        SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
        Log("2");
        await HasAwait();
        Log("5"); // Issue is here - Sync Context is now null
        Assert.IsNotNull(SynchronizationContext.Current);
    }

    public async Task HasAwait()
    {
        Log("3");
        await Task.Delay(300);
        Log("4");
    }

    private void Log(string text)
    {
        Console.WriteLine($"{text} - Thread {System.Threading.Thread.CurrentThread.ManagedThreadId} - {SynchronizationContext.Current}"); …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading asynchronous async-await

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