我在项目中使用以下post构建操作,将lib合并到我的应用程序中:
IF $(ConfigurationName) == Debug GOTO end
cp $(TargetPath) $(TargetDir)app_unmerged.exe
del $(TargetPath)
"C:\Program Files\Microsoft\ILMerge\ilmerge.exe" /internalize $(TargetDir)MyApp_unmerged.exe $(TargetDir)someLib.dll /out:$(TargetDir)myApp.exe
del $(TargetDir)myApp_unmerged.exe $(TargetDir)someLib.dll
:end
Run Code Online (Sandbox Code Playgroud)
这很好用.现在我有一个安装程序项目并添加了项目输出.我希望使用"主要输出来源",即/ bin/Release中的exe.但实际上使用的是/bin/release/myApp.exe,而不是/obj/release/myApp.exe.
有谁知道我是否可以更改此行为并使用/ bin/release中的输出作为安装程序项目?谢谢.
我试图从Visual Studio内部与xUnit.Net集成一个穷人作为后期构建事件.
我想要的是当我按下Shift + F6(构建测试项目)时,在成功构建之后它应该运行xUnit.Console.exe并将结果输出到html文件中,然后在浏览器中启动html文件.
下面是我到目前为止所做的工作,但不是我喜欢的(因为浏览器将显示为排序的模态对话框,我无法在Visual Studio和Visual Studio之间切换回切换前进/切换(使用Alt-Tab)浏览器.现在我必须关闭VS的浏览器再次获得焦点哪种糟糕.
我的Post Build活动如下:
"$(SolutionDir)\Components\xUnit.net\xunit.console.exe" "$(TargetPath)" /html "$(TargetDir)result.htm"
"$(TargetDir)result.htm"
Run Code Online (Sandbox Code Playgroud)
关于如何获得它的任何想法result.htm显示在浏览器内而不是模态模式?
在进一步测试之后,似乎执行的任何shell /命令都以模态模式运行.例如,我尝试使用简单的cmd.exe来弹出Command shell.
我尝试使用启动C:\ Windows\IE7\iexplore.exe"$(TargetDir)result.htm",但这不起作用...
我正在尝试将jsmin.exe作为后期构建事件添加到我的VS 2010项目中,但是当我尝试构建项目时,我得到"错误代码9009".
我已在命令提示符下测试,发现如果我导航到该文件夹,则运行
jsmin < debug.js > min.js
Run Code Online (Sandbox Code Playgroud)
然后它工作正常.
但是,如果我从C:\运行命令并输入完整路径,则返回
'C:\ Users\Andrew\Documents\Visual'未被识别为内部或外部命令,可操作程序或批处理文件.
所以我的结论是jsmin似乎不喜欢文件路径中的空格.鉴于Visual Studio的惯例是将项目存储在\ Visual Studio 2010 \的子文件夹中,有人可以建议我如何解决这个问题吗?
我试图执行以下后期构建事件代码,但我得到一个无用的错误:
"c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -file "$(SolutionDir)tools\nuget_pack.ps1"
Run Code Online (Sandbox Code Playgroud)
我尝试之前运行了以下PS脚本:
Set-ExecutionPolicy unrestricted
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
UPDATE
这很奇怪,我现在没有在VS上收到错误.但脚本不起作用.当我使用PowerShell控制台运行它时,我收到以下错误:

powershell visual-studio-2010 powershell-2.0 post-build-event nuget
在一个大的,预先存在的代码库中,我有几个*.dll,我需要注册COM interop.
这些清单注册使用mt.exe以下列方式作为构建后事件执行:
mt.exe -manifest "$(ProjectDir)myProjectManifestFragment.xml" -nodependency -managedassemblyname:"$(TargetFileName)" -out:"$(TargetName).manifest" -outputresource:"$(TargetFileName)";#2
Run Code Online (Sandbox Code Playgroud)
在这种情况下,不需要显式GUID,但是,自然地,mt.exe会生成以下性质的混乱警告:
mt.exe : genman warning G81010014: Explicit guid not defined for type myInternalType
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何在不明确定义GUID的情况下抑制这些警告?
注意,我不想采用post-build事件并重定向输出(la> NUL),因为我仍然希望收到错误通知.有一种方法只能从mt.exe中抑制stderrs,但我只想抑制这个警告.我甚至很高兴抑制mt.exe生成的所有警告(具体不必是G81010014).
mt.exe在MSDN上的文档似乎只显示一个详细的标志,但没有办法将详细级别更改为"简洁"模式,其中警告将被抑制.在Visual Studio 2010中,显然有一种方法可以抑制特定警告,但我无法确定这如何适用于特定于构建后事件,更不用说仅由mt.exe生成的警告.
先感谢您!这实际上是我在Stack Overflow上的第一篇文章:)让我知道我是否需要更具体,更广泛等... ^ _ ^
干杯!
-Kadaj
我有以下post-build事件:
powershell Set-ExecutionPolicy Unrestricted
powershell -file "$(SolutionDir)Obfuscation\_obfuscate.ps1" "$(SolutionDir)" "$(ProjectDir)"
powershell Set-ExecutionPolicy Restricted
Run Code Online (Sandbox Code Playgroud)
和PS脚本开头:
param
(
[string]$slnDir,
[string]$projectDir
)
Run Code Online (Sandbox Code Playgroud)
当MSBuild试图运行它时,我的第一个参数"$(SolutionDir)"被分成两个参数,因为解决方案路径包含一个空格字符:D:\Projects\Dion2 Mercurial\repo\Dion2Web\.所以我的脚本D:\Projects\Dion2作为第一个参数和Mercurial\repo\Dion2Web\第二个参数接收.
将这些参数发送到脚本文件的正确方法是什么?
注意:当脚本只有一个参数时,这样的构建后脚本可以正常工作.
这是我尝试将我的应用程序可执行文件复制到另一个文件夹更改它的名称:
IF $(ConfigurationName) == Release (
SET DESTINATION=$(ProjectDir)Output\Distribution
IF NOT EXIST "%DESTINATION%" ( MD "%DESTINATION%" )
XCOPY /Q /Y "$(TargetPath)" "%DESTINATION%"
RENAME "%DESTINATION%\$(TargetFileName)" "$(TargetName).Plain$(TargetExt)"
)
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一切使它工作,但它总是抛出错误代码255或1,这取决于.使用普通批处理文件运行该代码就像一个魅力!
我有一个用C++编写的应用程序,我使用CMake来构建和发布二进制文件.
我想让CMakeLists.txt脚本编译并运行一个CPP文件,该文件用于在为应用程序构建二进制文件后对许可证文件加时间戳并加密.我见过运行execute_process命令的例子,例如:
execute_process(COMMAND "gcc -o foo foo.cpp"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
execute_process(COMMAND "./foo"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE MY_FOO_VAR)
Run Code Online (Sandbox Code Playgroud)
我正在使用Visual Studio 2010在Windows上进行构建.问题是我不确定如何在VS的构建过程中让CMake运行程序.我希望构建操作中的最后一件事是许可文件时间戳,但我对VS或CMake的了解还不够.
是否可以从postbuild事件进行方法调用?
namespace Test
{
public class MyClass
{
public void DoSomething()
{
// Do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这个类驻留在我指定的构建事件的项目中.有没有办法将DoSomething称为postbuild事件?
我是Visual Studio的新手,似乎无法找到去查找构建前和构建后事件的位置。我知道如何在Windows上执行此操作,但是我目前在Mac上运行,而且工作方式似乎有所不同。如果有人可以帮助指导我,那就太好了!我专门在寻找构建后事件,但我认为它们在同一地方。
post-build-event ×10
c# ×4
.net ×2
powershell ×2
build-events ×1
building ×1
c++ ×1
cmake ×1
filepath ×1
guid ×1
installer ×1
javascript ×1
msbuild ×1
nuget ×1