我正在WinForms
开发一个项目,我正在使用WiX
创建安装程序。
但是当安装程序要复制来自非常长的路径的.dll
时,Visual Studio会这样说:
'Really long route'\EnterpriseLibrary....\ is too long, the fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
我发现文章讨论了 MAX_PATH 限制,例如与此Windows API相关的StackOverflow question中所述。
我正在组建一个大团队,我们刚刚发现了这个已知错误,但我们不允许缩短或修改路径。
我之前使用\\?\
字符尝试了上述链接所示的解决方案,因此我的WixVariables
保持如下:
<?define examplesPath="\\?\$(sys.CURRENTDIR)\..\..\ExamplesFolder" ?>
结果是这样的:
\\?\C:\reallylongpath\files
但它似乎不适用于WiX变量。
所以我的问题是:
有没有办法避免这260个字符的限制?如果是这样,怎么样?
拜托,我需要一个答案!
编辑:在尝试@Jans的建议时,我还发现,如果我将\\?\
字符串添加到WiX variable
,则错误消息会发生变化。现在它说:
The system cannot find the file '\\?\Reallylongpath\..\..\andreallylongfile\'
我想也许\\?\
没有转换我需要使用的..\
......这里有什么建议吗?
EDIT2:我在msdn上找到了这一行:
A consequence is that \\?\ turns off file name normalization performed by Windows APIs, including removing trailing spaces, expanding ‘.’ and ‘..’
:___(
答案 0 :(得分:0)
这是一个可怕的黑客,但你可以创建一个真实目录的符号链接。符号链接就像常规链接,除了它的行为与真实目录完全相同。
假设您有一个非常长的目录导致您遇到麻烦:
C:\blahblahblah\thisisreallylong\andnotaccessible\blahblahblah\
你可以为它创建一个符号链接,它有你喜欢的任何名字,但要短得多。把它想象成一个别名。因此,如果您在控制台上调用它,例如在C:\ temp目录中:
C:\temp\>mklink /D reallylong C:\blahblahblah\thisisreallylong\andnotaccessible\blahblahblah\
然后,您可以访问C:\ temp \ reallylong,就好像它是您的真实目录一样。请注意,您需要本地管理员权限才能创建符号链接。