直接问题:如果我有两个具有相同名称的文件(但在不同的目录中),似乎只有Visual Studio 2005可以透明地处理它?VS 2008和2010需要一堆调整?除了我的命名惯例,我做错了吗?
背景:
我正在开发C++统计库......我有两个文件夹:
/ Univariate
Normal.cpp
Normal.h
Beta.cpp
Beta.h
Adaptive.cpp
Adaptive.h
/ Multivariate
Normal.cpp
Normal.h
Beta.cpp
Beta.h
Adaptive.cpp
Adaptive.h
Run Code Online (Sandbox Code Playgroud)
我需要支持交叉编译 - 我使用g ++/make将这些相同的文件编译到Linux中的库中.他们工作得很好.
我一直在使用Visual Studio 2005而没有问题,但我需要升级到Visual Studio 2008或2010(目前在nVidia的nsight工具上流口水).但是,如果我将文件添加到具有相同名称的项目中(即使它们位于不同的目录中),我会遇到问题.我愿意改变我的命名惯例,但是我很好奇其他人是否遇到过这个问题并且找到了任何记录良好的解决方案?
我通过,如果我从2005年项目升级至2010年的项目,似乎VS 2010的事实进一步猛然一惊是能够正确地处理在不同目录中的两个名称相同的源文件; 但是,如果我删除其中一个重复文件,然后将其添加回项目,我会收到以下警告:
Distributions\Release\Adaptive.obj:警告LNK4042:指定了多次的对象; 临时演员被忽略了
现在我将中间目录指定为$(ProjectName)\ $(配置) - 我需要将我的目标文件放在与源代码树不同的位置.所以我可以看到为什么它将对象文件复制在一起,但是当项目从2005年转换到2008年或2010年时,会添加一堆条件编译:
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
Run Code Online (Sandbox Code Playgroud)
可以从C/C++ - >输出文件 - >"对象文件名"和"XML文档文件名"中的源文件属性页访问它们.但是,如果我只是直接添加文件(或删除并重新添加它们),VS在我尝试编译之前不会抱怨,但也从不添加条件指令 - 所以为了使事情正常工作,我必须为每个配置自己添加条件指令.我是犯了错误/不好的假设还是我在VS 2008/2010中发现了一个有效的错误?
c++ projects-and-solutions naming-conventions visual-studio-2010 visual-studio-2008
我如何抑制所有警告(或至少尽可能多的警告,因为那些带有MSB前缀的警告无法抑制如何抑制特定的MSBuild警告)?
我正在使用clickonce的Windows窗体应用程序.我必须部署一些资源程序集.这些程序集位于我的项目中的文件夹中(不作为参考).它们标记为BuildAction = content,CopyToOutputDir = Copy If Newer.使用此配置,我收到警告MSB3178:程序集''被错误地指定为文件.
当我将BuildAction设置为none时,警告会消失,但必须部署的程序集不会出现在ClickOnce Application Files中.
我想在clickonce的发布中添加这些程序集(有很多),没有这个警告,也没有在项目中添加这些dll作为引用.我研究了很多,但找不到禁用警告的解决方案.
编辑:
仅当我在"项目/属性/安全性选项卡"中设置"启用Clickonce安全设置"="True"时才会出现警告
样本项目:
只需构建并检查警告.
我有一个包含多个大型测试用例的项目,该项目的构建大约需要 2-3 分钟。我怀疑这与这个新的警告功能有关......例如:
警告 xUnit2003:不要使用 Assert.Equal()
警告 xUnit2004:不要使用 Assert.Equal() 检查布尔条件。
它正在对数千行执行此操作...
如果有一种方法可以禁用此功能,那就太好了。不确定这是否与 Visual Studio 运行程序或 xunit 本身有关。
在一个项目中我有以下参考布局:
References
+- AssemblyA 6.7.6643.0
+- AssemblyB
| \- AssemblyA 7.0.0.0
\- AssemblyC
\- AssemblyA 7.0.0.0
Run Code Online (Sandbox Code Playgroud)
AssemblyB 和 AssemblyC 是没有降级的 NuGet 引用。由于我无法控制的情况,升级 AssemblyA 不是一个选择。但我收到这个警告:
发现“AssemblyA”不同版本之间存在无法解决的冲突。当日志详细程度设置为详细时,这些引用冲突会在构建日志中列出。
所以我就这样做了,这就是输出:
“AssemblyA,版本=6.7.6643.0”和“AssemblyA,版本=7.0.0.0”之间存在冲突。选择“AssemblyA,Version=6.7.6643.0”是因为它是主要的,而“AssemblyA,Version=7.0.0.0”不是。依赖于“AssemblyA,Version=6.7.6643.0”的引用[AssemblyA.dll]。AssemblyA.dll 项目文件项包含引起引用的“AssemblyA.dll”。AssemblyA,版本=6.7.6643.0 依赖于“AssemblyA,版本=7.0.0.0”的引用[]。AssemblyB.dll 项目文件项包含引起引用的“AssemblyB.dll”。AssemblyB,版本=7.0.0.0 AssemblyC.dll 项目文件项包括引起引用“AssemblyC.dll”。AssemblyC,版本=9.0.0.0
它选择了我想要的版本,但我仍然在 Visual Studio 中收到警告。所以我更新了 app.config 绑定重定向,希望它能消除警告:
<dependentAssembly>
<assemblyIdentity name="AssemblyA" publicKeyToken="..." culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="6.7.6643.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
但警告仍然存在。我已经确认,如果我将 AssemblyA 升级到 7.0.0.0,它会导致警告消失。但正如我之前所说,由于我无法控制的其他原因,我现在无法升级此程序集。
是否有办法仅针对这一特定情况抑制此警告?
谢谢
.net msbuild visual-studio-express visual-studio visual-studio-2017
c# ×2
msbuild ×2
.net ×1
asp.net-core ×1
c++ ×1
clickonce ×1
command-line ×1
deployment ×1
unit-testing ×1
winforms ×1
xunit ×1
xunit.net ×1