所以,正如标题所示,我现在有一个VS2010解决方案,里面有大约50个项目.如果我对没有引用的"顶级"项目进行更改,那么VS仍会重建所有50个项目.我正在运行Visual Studio 2010 Ultimate而没有任何附加组件.我正在使用ILMerge将所有项目合并到一个文件中.
我已经通过检查较低级别dll的时间戳来验证这一点,并且看到它们确实已经重建,即使它们的代码没有被触及.
我已阅读所有回复和评论:
但是他们中的大多数只提供卸载项目的建议,以加快构建时间,但没有具体的解决方案.我试图弄清楚为什么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.cs和Resources.resx(并评论指出,利用了的代码.Properties.Resources对这些资源的对象),然后修改的WinForm将不再重建整个解决方案,只会重建WinForm.
添加Resources.resx和Resources.Designer.cs返回项目B(但保留引用的代码,以便没有任何东西利用资源)将重新引入完整的构建行为.
要查看我的资源文件是否已损坏,我再次删除它们,然后创建一个新文件(通过Project Properties - > Resources)并重新添加与以前相同的资源,这是一个单独的Excel文件.使用此设置,仍将进行完全重建.
然后我删除了单个资源,但将资源文件保留在项目B中.即使没有添加资源,但资源文件仍在项目中,也会发生完全(不需要的)重建.
看起来只是将资源文件添加到(.NET 3.5)项目中将导致Visual Studio 2010始终重建该项目.这是一个错误或预期/预期的行为?
再次感谢所有人!
我已经在这里阅读过以前的问题,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>的手动锁会做得更好.这样做的原因是上面的场景已经打破了" 同一个线程将生成和消费存储在包中的数据 "规则.
另外我还发现 …
我正在编写一个程序,其中有一个由多个线程共享的对象:
显然有必要在写入时锁定对象,因为我们不希望多个线程同时写入对象.
我的问题是:
我问这个问题,因为在Microsoft Office中,Word的两个实例不可能以读/写访问模式访问文档; 但是当文档以读/写模式打开时,可以打开另一个Word实例以只读模式访问文档.线程中是否也适用相同的逻辑?
如果我想对某些代码进行"一劳永逸",但仍希望确保清理我的内存(为什么异步委托方法需要调用EndInvoke?),以下是否会实现这一目标?
Action myAction = () => LongRunTime();
myAction.BeginInvoke(myAction.EndInvoke,null);
Run Code Online (Sandbox Code Playgroud)
我环顾四周,但没有看到任何地方使用过的模式.相反,人们使用annonomoyus方法作为他们的回调(例如结束BeginInvoke的正确方法?)或者他们定义一个实际的回调方法.由于我没有看到其他人这样做,这让我觉得它要么不起作用,要么是一个坏主意.
谢谢!
从最近开始,(我认为是因为我将代码转换为 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 推荐的?
我正在尝试使用 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?
我有一个我在本地机器上用.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) 我正在尝试将 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 的构造函数: …
使用 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
我确定我做错了什么(而不是这是一个错误),但我一生都无法弄清楚如何进行这项工作。 …
可以说我的全局变量中有“ .foo”,.gitignore这对我当前的所有项目都很有效(并且可以说它们很多,因此我想将其保留在全局忽略文件中)。
现在,我开始一个新项目,该项目.foo在所有地方都使用文件。
如何.foo仅针对此特定项目“撤消” 在全局忽略中定义的文件的排除?
这意味着我可以git add .在使用新项目时让它拾取所有.foo文件,但是如果我git add .在任何其他项目中运行,则这些.foo文件将被忽略。
使用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) c# ×4
asynchronous ×2
kotlin ×2
.net ×1
android ×1
android-lint ×1
async-await ×1
aws-cdk ×1
bigdecimal ×1
concurrency ×1
delegates ×1
f# ×1
f#-4.0 ×1
f#-scripting ×1
git ×1
gitignore ×1
ilmerge ×1
jackson ×1
java ×1
json ×1
msbuild ×1
mutex ×1
sas ×1